Merge branch 'webv2' into fix/ImplementPasswordRules
2
.github/workflows/auto-comment-on-label.yaml
vendored
@ -11,7 +11,7 @@ jobs:
|
||||
issues: write
|
||||
steps:
|
||||
- name: Add comment
|
||||
uses: peter-evans/create-or-update-comment@66af80548887a02b37dfc2ddd9531512ee489557
|
||||
uses: peter-evans/create-or-update-comment@e0e8aa00752bbac08c4393c1f7834e6ee753c159
|
||||
with:
|
||||
issue-number: ${{ github.event.issue.number }}
|
||||
body: |
|
||||
|
16
.github/workflows/build-storybook.yml
vendored
@ -3,7 +3,7 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- webv2
|
||||
paths: ['web/stories/**', 'web/components/**'] # Trigger the action only when files change in the folders defined here
|
||||
paths: ['web/stories/**', 'web/components/**', 'web/.storybook/**'] # Trigger the action only when files change in the folders defined here
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
@ -20,8 +20,22 @@ jobs:
|
||||
run: | # Install npm packages and build the Storybook files
|
||||
cd web
|
||||
npm install --include-dev --force
|
||||
cd .storybook/tools
|
||||
./generate-stories.sh
|
||||
cd -
|
||||
npm run build-storybook -- -o ../docs/components
|
||||
|
||||
- name: Commit changes
|
||||
uses: EndBug/add-and-commit@v9
|
||||
with:
|
||||
author_name: Owncast
|
||||
author_email: owncast@owncast.online
|
||||
message: 'Commit updated Storybook stories'
|
||||
add: '*.stories.*'
|
||||
pull: '--rebase --autostash'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Dispatch event to web site
|
||||
uses: peter-evans/repository-dispatch@v2
|
||||
with:
|
||||
|
10
.github/workflows/container.yaml
vendored
@ -51,6 +51,10 @@ jobs:
|
||||
EARTHLY_PUSH: true
|
||||
run: ./build/develop/container.sh
|
||||
|
||||
- name: Build
|
||||
if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' }}
|
||||
run: ./build/develop/container.sh
|
||||
- name: Build and push
|
||||
if: ${{ github.event_name == 'schedule' && env.GH_CR_PAT != null }}
|
||||
uses: nick-fields/retry@v2
|
||||
with:
|
||||
timeout_minutes: 10
|
||||
max_attempts: 3
|
||||
command: ./build/develop/container.sh
|
||||
|
7
.github/workflows/hls-tests.yml
vendored
@ -28,5 +28,10 @@ jobs:
|
||||
- uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: '1.18.8'
|
||||
|
||||
- name: Run HLS tests
|
||||
run: cd test/automated/hls && ./run.sh
|
||||
uses: nick-fields/retry@v2
|
||||
with:
|
||||
timeout_minutes: 10
|
||||
max_attempts: 3
|
||||
command: cd test/automated/hls && ./run.sh
|
||||
|
31
Earthfile
@ -77,7 +77,6 @@ build:
|
||||
RUN go build -a -installsuffix cgo -ldflags "$([ "$GOOS"z != darwinz ] && echo "-linkmode external -extldflags -static ") -s -w -X github.com/owncast/owncast/config.GitCommit=$EARTHLY_GIT_HASH -X github.com/owncast/owncast/config.VersionNumber=$version -X github.com/owncast/owncast/config.BuildPlatform=$NAME" -tags sqlite_omit_load_extension -o owncast main.go
|
||||
|
||||
SAVE ARTIFACT owncast owncast
|
||||
SAVE ARTIFACT README.md README.md
|
||||
|
||||
package:
|
||||
RUN apk add --update --no-cache zip >> /dev/null
|
||||
@ -98,14 +97,14 @@ package:
|
||||
END
|
||||
|
||||
COPY (+build/owncast --platform $TARGETPLATFORM) /build/dist/owncast
|
||||
COPY (+build/README.md --platform $TARGETPLATFORM) /build/dist/README.md
|
||||
ENV ZIPNAME owncast-$version-$NAME.zip
|
||||
RUN cd /build/dist && zip -r -q -8 /build/dist/owncast.zip .
|
||||
SAVE ARTIFACT /build/dist/owncast.zip owncast.zip AS LOCAL dist/$ZIPNAME
|
||||
|
||||
docker:
|
||||
ARG image=ghcr.io/owncast/owncast
|
||||
ARG tag=develop
|
||||
# Multiple image names can be tagged at once. They should all be passed
|
||||
# in as space separated strings using the full account/repo:tag format.
|
||||
# https://github.com/earthly/earthly/blob/aea38448fa9c0064b1b70d61be717ae740689fb9/docs/earthfile/earthfile.md#assigning-multiple-image-names
|
||||
ARG TARGETPLATFORM
|
||||
FROM --platform=$TARGETPLATFORM alpine:3.15.5
|
||||
RUN apk update && apk add --no-cache ffmpeg ffmpeg-libs ca-certificates unzip && update-ca-certificates
|
||||
@ -120,11 +119,25 @@ docker:
|
||||
|
||||
ENTRYPOINT ["/app/owncast"]
|
||||
EXPOSE 8080 1935
|
||||
SAVE IMAGE --push $image:$tag
|
||||
|
||||
ARG images=ghcr.io/owncast/owncast:testing
|
||||
RUN echo "Saving images: ${images}"
|
||||
|
||||
# Tag this image with the list of names
|
||||
# passed along.
|
||||
FOR --no-cache i IN ${images}
|
||||
SAVE IMAGE --push "${i}"
|
||||
END
|
||||
|
||||
dockerfile:
|
||||
FROM DOCKERFILE -f Dockerfile .
|
||||
|
||||
testing:
|
||||
ARG images
|
||||
FOR i IN ${images}
|
||||
RUN echo "Testing ${i}"
|
||||
END
|
||||
|
||||
unit-tests:
|
||||
FROM --platform=linux/amd64 bdwyertech/go-crosscompile
|
||||
COPY . /build
|
||||
@ -138,3 +151,11 @@ api-tests:
|
||||
WORKDIR /build/test/automated/api
|
||||
RUN npm install
|
||||
RUN ./run.sh
|
||||
|
||||
hls-tests:
|
||||
FROM --platform=linux/amd64 bdwyertech/go-crosscompile
|
||||
RUN apk add npm font-noto && fc-cache -f
|
||||
COPY . /build
|
||||
WORKDIR /build/test/automated/hls
|
||||
RUN npm install
|
||||
RUN ./run.sh
|
||||
|
@ -80,7 +80,11 @@ Owncast consists of two projects.
|
||||
1. The Owncast backend written in Go.
|
||||
1. The frontend written in React.
|
||||
|
||||
[Read more about running from source](https://owncast.online/docs/building/).
|
||||
[Read more about running from source](https://owncast.online/development/).
|
||||
|
||||
### Important note about source code and the develop branch
|
||||
|
||||
The `develop` branch is always the most up-to-date state of development and this may not be what you always want. If you want to run the latest released stable version, check out the tag related to that release. For example, if you'd only like the source prior to the v0.1.0 development cycle you can check out the `v0.0.13` tag.
|
||||
|
||||
### Backend
|
||||
|
||||
|
@ -4,24 +4,21 @@ set -e
|
||||
# Development container builder
|
||||
#
|
||||
# Must authenticate first: https://docs.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages
|
||||
# env vars:
|
||||
# env vars:
|
||||
# $EARTHLY_BUILD_BRANCH: git branch to checkout
|
||||
# $EARTHLY_BUILD_TAG: tag for container image
|
||||
|
||||
|
||||
EARTHLY_IMAGE_NAME="owncast"
|
||||
BUILD_TAG=${EARTHLY_BUILD_TAG:-webv2}
|
||||
DATE=$(date +"%Y%m%d")
|
||||
VERSION="${DATE}-${BUILD_TAG}"
|
||||
|
||||
|
||||
echo "Building container image ${EARTHLY_IMAGE_NAME}:${BUILD_TAG} ..."
|
||||
|
||||
# Change to the root directory of the repository
|
||||
cd "$(git rev-parse --show-toplevel)" || exit
|
||||
if [ -n "${EARTHLY_BUILD_BRANCH}" ]; then
|
||||
git checkout "${EARTHLY_BUILD_BRANCH}" || exit
|
||||
git checkout "${EARTHLY_BUILD_BRANCH}" || exit
|
||||
fi
|
||||
|
||||
earthly --ci +docker-all --image="ghcr.io/owncast/${EARTHLY_IMAGE_NAME}" --tag="${BUILD_TAG}" --version="${VERSION}"
|
||||
earthly --ci +dockerfile
|
||||
earthly --ci +docker-all --images="ghcr.io/owncast/${EARTHLY_IMAGE_NAME}:${BUILD_TAG}" --version="${VERSION}"
|
||||
|
@ -27,4 +27,7 @@ var (
|
||||
|
||||
// CustomEmojiPath is the emoji directory.
|
||||
CustomEmojiPath = filepath.Join(DataDirectory, "emoji")
|
||||
|
||||
// PublicFilesPath is the optional directory for hosting public files.
|
||||
PublicFilesPath = filepath.Join(DataDirectory, "public")
|
||||
)
|
||||
|
@ -63,7 +63,7 @@ func GetDefaults() Defaults {
|
||||
|
||||
<hr/>
|
||||
|
||||
<video id="video" controls preload="metadata" width="40%" poster="https://videos.owncast.online/t/xaJ3xNn9Y6pWTdB25m9ai3">
|
||||
<video id="video" controls preload="metadata" style="width: 60vw; max-width: 600px; min-width: 200px;" poster="https://videos.owncast.online/t/xaJ3xNn9Y6pWTdB25m9ai3">
|
||||
<source src="https://assets.owncast.tv/video/owncast-embed.mp4" type="video/mp4" />
|
||||
</video>
|
||||
`,
|
||||
|
@ -650,6 +650,22 @@ func SetCustomStyles(w http.ResponseWriter, r *http.Request) {
|
||||
controllers.WriteSimpleResponse(w, true, "custom styles updated")
|
||||
}
|
||||
|
||||
// SetCustomJavascript will set the Javascript string we insert into the page.
|
||||
func SetCustomJavascript(w http.ResponseWriter, r *http.Request) {
|
||||
customJavascript, success := getValueFromRequest(w, r)
|
||||
if !success {
|
||||
controllers.WriteSimpleResponse(w, false, "unable to update custom javascript")
|
||||
return
|
||||
}
|
||||
|
||||
if err := data.SetCustomJavascript(customJavascript.Value.(string)); err != nil {
|
||||
controllers.WriteSimpleResponse(w, false, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
controllers.WriteSimpleResponse(w, true, "custom styles updated")
|
||||
}
|
||||
|
||||
// SetForbiddenUsernameList will set the list of usernames we do not allow to use.
|
||||
func SetForbiddenUsernameList(w http.ResponseWriter, r *http.Request) {
|
||||
type forbiddenUsernameListRequest struct {
|
||||
|
@ -58,28 +58,3 @@ func SetBrowserNotificationConfiguration(w http.ResponseWriter, r *http.Request)
|
||||
|
||||
controllers.WriteSimpleResponse(w, true, "updated browser push config with provided values")
|
||||
}
|
||||
|
||||
// SetTwitterConfiguration will set the browser notification configuration.
|
||||
func SetTwitterConfiguration(w http.ResponseWriter, r *http.Request) {
|
||||
if !requirePOST(w, r) {
|
||||
return
|
||||
}
|
||||
|
||||
type request struct {
|
||||
Value models.TwitterConfiguration `json:"value"`
|
||||
}
|
||||
|
||||
decoder := json.NewDecoder(r.Body)
|
||||
var config request
|
||||
if err := decoder.Decode(&config); err != nil {
|
||||
controllers.WriteSimpleResponse(w, false, "unable to update twitter config with provided values")
|
||||
return
|
||||
}
|
||||
|
||||
if err := data.SetTwitterConfiguration(config.Value); err != nil {
|
||||
controllers.WriteSimpleResponse(w, false, "unable to update twitter config with provided values")
|
||||
return
|
||||
}
|
||||
|
||||
controllers.WriteSimpleResponse(w, true, "updated twitter config with provided values")
|
||||
}
|
||||
|
@ -46,6 +46,7 @@ func GetServerConfig(w http.ResponseWriter, r *http.Request) {
|
||||
SocialHandles: data.GetSocialHandles(),
|
||||
NSFW: data.GetNSFW(),
|
||||
CustomStyles: data.GetCustomStyles(),
|
||||
CustomJavascript: data.GetCustomJavascript(),
|
||||
AppearanceVariables: data.GetCustomColorVariableValues(),
|
||||
},
|
||||
FFmpegPath: ffmpeg,
|
||||
@ -84,7 +85,6 @@ func GetServerConfig(w http.ResponseWriter, r *http.Request) {
|
||||
Notifications: notificationsConfigResponse{
|
||||
Discord: data.GetDiscordConfig(),
|
||||
Browser: data.GetBrowserPushConfig(),
|
||||
Twitter: data.GetTwitterConfiguration(),
|
||||
},
|
||||
}
|
||||
|
||||
@ -139,6 +139,7 @@ type webConfigResponse struct {
|
||||
StreamTitle string `json:"streamTitle"` // What's going on with the current stream
|
||||
SocialHandles []models.SocialHandle `json:"socialHandles"`
|
||||
CustomStyles string `json:"customStyles"`
|
||||
CustomJavascript string `json:"customJavascript"`
|
||||
AppearanceVariables map[string]string `json:"appearanceVariables"`
|
||||
}
|
||||
|
||||
@ -160,5 +161,4 @@ type federationConfigResponse struct {
|
||||
type notificationsConfigResponse struct {
|
||||
Browser models.BrowserNotificationConfiguration `json:"browser"`
|
||||
Discord models.DiscordConfiguration `json:"discord"`
|
||||
Twitter models.TwitterConfiguration `json:"twitter"`
|
||||
}
|
||||
|
13
controllers/customJavascript.go
Normal file
@ -0,0 +1,13 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/owncast/owncast/core/data"
|
||||
)
|
||||
|
||||
// ServeCustomJavascript will serve optional custom Javascript.
|
||||
func ServeCustomJavascript(w http.ResponseWriter, r *http.Request) {
|
||||
js := data.GetCustomJavascript()
|
||||
_, _ = w.Write([]byte(js))
|
||||
}
|
@ -102,7 +102,7 @@ func transitionToOfflineVideoStreamContent() {
|
||||
_transcoder.SetLatencyLevel(models.GetLatencyLevel(4))
|
||||
_transcoder.SetIsEvent(true)
|
||||
|
||||
offlineFilePath, err := saveOfflineClipToDisk("offline.ts")
|
||||
offlineFilePath, err := saveOfflineClipToDisk("offline.tsclip")
|
||||
if err != nil {
|
||||
log.Fatalln("unable to save offline clip:", err)
|
||||
}
|
||||
|
@ -44,6 +44,7 @@ const (
|
||||
chatDisabledKey = "chat_disabled"
|
||||
externalActionsKey = "external_actions"
|
||||
customStylesKey = "custom_styles"
|
||||
customJavascriptKey = "custom_javascript"
|
||||
videoCodecKey = "video_codec"
|
||||
blockedUsernamesKey = "blocked_usernames"
|
||||
publicKeyKey = "public_key"
|
||||
@ -63,7 +64,6 @@ const (
|
||||
browserPushConfigurationKey = "browser_push_configuration"
|
||||
browserPushPublicKeyKey = "browser_push_public_key"
|
||||
browserPushPrivateKeyKey = "browser_push_private_key"
|
||||
twitterConfigurationKey = "twitter_configuration"
|
||||
hasConfiguredInitialNotificationsKey = "has_configured_initial_notifications"
|
||||
hideViewerCountKey = "hide_viewer_count"
|
||||
customOfflineMessageKey = "custom_offline_message"
|
||||
@ -561,6 +561,21 @@ func GetCustomStyles() string {
|
||||
return style
|
||||
}
|
||||
|
||||
// SetCustomJavascript will save a string with Javascript to insert into the page.
|
||||
func SetCustomJavascript(styles string) error {
|
||||
return _datastore.SetString(customJavascriptKey, styles)
|
||||
}
|
||||
|
||||
// GetCustomJavascript will return a string with Javascript to insert into the page.
|
||||
func GetCustomJavascript() string {
|
||||
style, err := _datastore.GetString(customJavascriptKey)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
return style
|
||||
}
|
||||
|
||||
// SetVideoCodec will set the codec used for video encoding.
|
||||
func SetVideoCodec(codec string) error {
|
||||
return _datastore.SetString(videoCodecKey, codec)
|
||||
@ -880,27 +895,6 @@ func GetBrowserPushPrivateKey() (string, error) {
|
||||
return _datastore.GetString(browserPushPrivateKeyKey)
|
||||
}
|
||||
|
||||
// SetTwitterConfiguration will set the Twitter configuration.
|
||||
func SetTwitterConfiguration(config models.TwitterConfiguration) error {
|
||||
configEntry := ConfigEntry{Key: twitterConfigurationKey, Value: config}
|
||||
return _datastore.Save(configEntry)
|
||||
}
|
||||
|
||||
// GetTwitterConfiguration will return the Twitter configuration.
|
||||
func GetTwitterConfiguration() models.TwitterConfiguration {
|
||||
configEntry, err := _datastore.Get(twitterConfigurationKey)
|
||||
if err != nil {
|
||||
return models.TwitterConfiguration{Enabled: false}
|
||||
}
|
||||
|
||||
var config models.TwitterConfiguration
|
||||
if err := configEntry.getObject(&config); err != nil {
|
||||
return models.TwitterConfiguration{Enabled: false}
|
||||
}
|
||||
|
||||
return config
|
||||
}
|
||||
|
||||
// SetHasPerformedInitialNotificationsConfig sets when performed initial setup.
|
||||
func SetHasPerformedInitialNotificationsConfig(hasConfigured bool) error {
|
||||
return _datastore.SetBool(hasConfiguredInitialNotificationsKey, true)
|
||||
|
@ -92,7 +92,7 @@ func SetStreamAsDisconnected() {
|
||||
_stats.LastConnectTime = nil
|
||||
_broadcaster = nil
|
||||
|
||||
offlineFilename := "offline.ts"
|
||||
offlineFilename := "offline.tsclip"
|
||||
|
||||
offlineFilePath, err := saveOfflineClipToDisk(offlineFilename)
|
||||
if err != nil {
|
||||
|
@ -31,8 +31,7 @@ var supportedCodecs = map[string]string{
|
||||
}
|
||||
|
||||
// Libx264Codec represents an instance of the Libx264 Codec.
|
||||
type Libx264Codec struct {
|
||||
}
|
||||
type Libx264Codec struct{}
|
||||
|
||||
// Name returns the codec name.
|
||||
func (c *Libx264Codec) Name() string {
|
||||
@ -77,24 +76,26 @@ func (c *Libx264Codec) VariantFlags(v *HLSVariant) string {
|
||||
|
||||
// GetPresetForLevel returns the string preset for this codec given an integer level.
|
||||
func (c *Libx264Codec) GetPresetForLevel(l int) string {
|
||||
presetMapping := []string{
|
||||
"ultrafast",
|
||||
"superfast",
|
||||
"veryfast",
|
||||
"faster",
|
||||
"fast",
|
||||
presetMapping := map[int]string{
|
||||
0: "ultrafast",
|
||||
1: "superfast",
|
||||
2: "veryfast",
|
||||
3: "faster",
|
||||
4: "fast",
|
||||
}
|
||||
|
||||
if l >= len(presetMapping) {
|
||||
return "superfast" //nolint:goconst
|
||||
preset, ok := presetMapping[l]
|
||||
if !ok {
|
||||
defaultPreset := presetMapping[1]
|
||||
log.Errorf("Invalid level for x264 preset %d, defaulting to %s", l, defaultPreset)
|
||||
return defaultPreset
|
||||
}
|
||||
|
||||
return presetMapping[l]
|
||||
return preset
|
||||
}
|
||||
|
||||
// OmxCodec represents an instance of the Omx codec.
|
||||
type OmxCodec struct {
|
||||
}
|
||||
type OmxCodec struct{}
|
||||
|
||||
// Name returns the codec name.
|
||||
func (c *OmxCodec) Name() string {
|
||||
@ -135,24 +136,26 @@ func (c *OmxCodec) VariantFlags(v *HLSVariant) string {
|
||||
|
||||
// GetPresetForLevel returns the string preset for this codec given an integer level.
|
||||
func (c *OmxCodec) GetPresetForLevel(l int) string {
|
||||
presetMapping := []string{
|
||||
"ultrafast",
|
||||
"superfast",
|
||||
"veryfast",
|
||||
"faster",
|
||||
"fast",
|
||||
presetMapping := map[int]string{
|
||||
0: "ultrafast",
|
||||
1: "superfast",
|
||||
2: "veryfast",
|
||||
3: "faster",
|
||||
4: "fast",
|
||||
}
|
||||
|
||||
if l >= len(presetMapping) {
|
||||
return "superfast"
|
||||
preset, ok := presetMapping[l]
|
||||
if !ok {
|
||||
defaultPreset := presetMapping[1]
|
||||
log.Errorf("Invalid level for omx preset %d, defaulting to %s", l, defaultPreset)
|
||||
return defaultPreset
|
||||
}
|
||||
|
||||
return presetMapping[l]
|
||||
return preset
|
||||
}
|
||||
|
||||
// VaapiCodec represents an instance of the Vaapi codec.
|
||||
type VaapiCodec struct {
|
||||
}
|
||||
type VaapiCodec struct{}
|
||||
|
||||
// Name returns the codec name.
|
||||
func (c *VaapiCodec) Name() string {
|
||||
@ -195,24 +198,26 @@ func (c *VaapiCodec) VariantFlags(v *HLSVariant) string {
|
||||
|
||||
// GetPresetForLevel returns the string preset for this codec given an integer level.
|
||||
func (c *VaapiCodec) GetPresetForLevel(l int) string {
|
||||
presetMapping := []string{
|
||||
"ultrafast",
|
||||
"superfast",
|
||||
"veryfast",
|
||||
"faster",
|
||||
"fast",
|
||||
presetMapping := map[int]string{
|
||||
0: "ultrafast",
|
||||
1: "superfast",
|
||||
2: "veryfast",
|
||||
3: "faster",
|
||||
4: "fast",
|
||||
}
|
||||
|
||||
if l >= len(presetMapping) {
|
||||
return "superfast"
|
||||
preset, ok := presetMapping[l]
|
||||
if !ok {
|
||||
defaultPreset := presetMapping[1]
|
||||
log.Errorf("Invalid level for vaapi preset %d, defaulting to %s", l, defaultPreset)
|
||||
return defaultPreset
|
||||
}
|
||||
|
||||
return presetMapping[l]
|
||||
return preset
|
||||
}
|
||||
|
||||
// NvencCodec represents an instance of the Nvenc Codec.
|
||||
type NvencCodec struct {
|
||||
}
|
||||
type NvencCodec struct{}
|
||||
|
||||
// Name returns the codec name.
|
||||
func (c *NvencCodec) Name() string {
|
||||
@ -256,24 +261,26 @@ func (c *NvencCodec) VariantFlags(v *HLSVariant) string {
|
||||
|
||||
// GetPresetForLevel returns the string preset for this codec given an integer level.
|
||||
func (c *NvencCodec) GetPresetForLevel(l int) string {
|
||||
presetMapping := []string{
|
||||
"p1",
|
||||
"p2",
|
||||
"p3",
|
||||
"p4",
|
||||
"p5",
|
||||
presetMapping := map[int]string{
|
||||
0: "p1",
|
||||
1: "p2",
|
||||
2: "p3",
|
||||
3: "p4",
|
||||
4: "p5",
|
||||
}
|
||||
|
||||
if l >= len(presetMapping) {
|
||||
return "p3"
|
||||
preset, ok := presetMapping[l]
|
||||
if !ok {
|
||||
defaultPreset := presetMapping[2]
|
||||
log.Errorf("Invalid level for nvenc preset %d, defaulting to %s", l, defaultPreset)
|
||||
return defaultPreset
|
||||
}
|
||||
|
||||
return presetMapping[l]
|
||||
return preset
|
||||
}
|
||||
|
||||
// QuicksyncCodec represents an instance of the Intel Quicksync Codec.
|
||||
type QuicksyncCodec struct {
|
||||
}
|
||||
type QuicksyncCodec struct{}
|
||||
|
||||
// Name returns the codec name.
|
||||
func (c *QuicksyncCodec) Name() string {
|
||||
@ -312,19 +319,22 @@ func (c *QuicksyncCodec) VariantFlags(v *HLSVariant) string {
|
||||
|
||||
// GetPresetForLevel returns the string preset for this codec given an integer level.
|
||||
func (c *QuicksyncCodec) GetPresetForLevel(l int) string {
|
||||
presetMapping := []string{
|
||||
"ultrafast",
|
||||
"superfast",
|
||||
"veryfast",
|
||||
"faster",
|
||||
"fast",
|
||||
presetMapping := map[int]string{
|
||||
0: "ultrafast",
|
||||
1: "superfast",
|
||||
2: "veryfast",
|
||||
3: "faster",
|
||||
4: "fast",
|
||||
}
|
||||
|
||||
if l >= len(presetMapping) {
|
||||
return "superfast"
|
||||
preset, ok := presetMapping[l]
|
||||
if !ok {
|
||||
defaultPreset := presetMapping[1]
|
||||
log.Errorf("Invalid level for quicksync preset %d, defaulting to %s", l, defaultPreset)
|
||||
return defaultPreset
|
||||
}
|
||||
|
||||
return presetMapping[l]
|
||||
return preset
|
||||
}
|
||||
|
||||
// Video4Linux represents an instance of the V4L Codec.
|
||||
@ -367,24 +377,25 @@ func (c *Video4Linux) VariantFlags(v *HLSVariant) string {
|
||||
|
||||
// GetPresetForLevel returns the string preset for this codec given an integer level.
|
||||
func (c *Video4Linux) GetPresetForLevel(l int) string {
|
||||
presetMapping := []string{
|
||||
"ultrafast",
|
||||
"superfast",
|
||||
"veryfast",
|
||||
"faster",
|
||||
"fast",
|
||||
presetMapping := map[int]string{
|
||||
0: "ultrafast",
|
||||
1: "superfast",
|
||||
2: "veryfast",
|
||||
3: "faster",
|
||||
4: "fast",
|
||||
}
|
||||
|
||||
if l >= len(presetMapping) {
|
||||
return "superfast"
|
||||
preset, ok := presetMapping[l]
|
||||
if !ok {
|
||||
defaultPreset := presetMapping[1]
|
||||
log.Errorf("Invalid level for v4l preset %d, defaulting to %s", l, defaultPreset)
|
||||
return defaultPreset
|
||||
}
|
||||
|
||||
return presetMapping[l]
|
||||
return preset
|
||||
}
|
||||
|
||||
// VideoToolboxCodec represents an instance of the VideoToolbox codec.
|
||||
type VideoToolboxCodec struct {
|
||||
}
|
||||
type VideoToolboxCodec struct{}
|
||||
|
||||
// Name returns the codec name.
|
||||
func (c *VideoToolboxCodec) Name() string {
|
||||
@ -435,19 +446,22 @@ func (c *VideoToolboxCodec) VariantFlags(v *HLSVariant) string {
|
||||
|
||||
// GetPresetForLevel returns the string preset for this codec given an integer level.
|
||||
func (c *VideoToolboxCodec) GetPresetForLevel(l int) string {
|
||||
presetMapping := []string{
|
||||
"ultrafast",
|
||||
"superfast",
|
||||
"veryfast",
|
||||
"faster",
|
||||
"fast",
|
||||
presetMapping := map[int]string{
|
||||
0: "ultrafast",
|
||||
1: "superfast",
|
||||
2: "veryfast",
|
||||
3: "faster",
|
||||
4: "fast",
|
||||
}
|
||||
|
||||
if l >= len(presetMapping) {
|
||||
return "superfast"
|
||||
preset, ok := presetMapping[l]
|
||||
if !ok {
|
||||
defaultPreset := presetMapping[1]
|
||||
log.Errorf("Invalid level for videotoolbox preset %d, defaulting to %s", l, defaultPreset)
|
||||
return defaultPreset
|
||||
}
|
||||
|
||||
return presetMapping[l]
|
||||
return preset
|
||||
}
|
||||
|
||||
// GetCodecs will return the supported codecs available on the system.
|
||||
|
40
docs/Release.md
Normal file
@ -0,0 +1,40 @@
|
||||
# Build + Distribute Official Owncast Releases
|
||||
|
||||
Owncast is released both as standalone archives that can be downloaded and installed themselves, as well as Docker images that can be pulled from Docker Hub.
|
||||
|
||||
The original Docker Hub image was [gabekangas/owncast](https://hub.docker.com/repository/docker/gabekangas/owncast) but it has been deprecated in favor of [owncast/owncast](https://hub.docker.com/repository/docker/owncast/owncast). In the short term both images will need to be updated with new releases and in the future we can deprecate the old one.
|
||||
|
||||
## Dependencies
|
||||
|
||||
1. Install [Earthly](https://earthly.dev/get-earthly), a build automation tool. It uses our [Earthfile](https://github.com/owncast/owncast/blob/develop/Earthfile) to reproducably build the release files and Docker images.
|
||||
2. Be [logged into Docker Hub](https://docs.docker.com/engine/reference/commandline/login/) with an account that has access to `gabekangas/owncast` and `owncast/owncast` so the images can be pushed to Docker Hub.
|
||||
|
||||
## Build release files
|
||||
|
||||
1. Create the release archive files for all the different architectures. Specify the human readable version number in the `version` flag such as `v0.1.0`, `nightly`, `develop`, etc. It will be used to identify this binary when running Owncast. You'll find the archives for this release in the `dist` directory when it's complete.
|
||||
|
||||
**Run**: `earthly +package-all --version="v0.1.0"`
|
||||
|
||||
2. Create a release on GitHub with release notes and Changelog for the version.
|
||||
|
||||
3. Upload the release archive files to the release on GitHub via the web interface.
|
||||
|
||||
## Build and upload Docker images
|
||||
|
||||
Specify the human readable version number in the `version` flag such as `v0.1.0`, `nightly`, `develop`, etc. It will be used to identify this binary when running Owncast.
|
||||
|
||||
Create and push the image to Docker Hub with a list of tags. You'll want to tag the image with both the new version number and `latest`.
|
||||
|
||||
**Run**: `earthly --push +docker-all --images="owncast/owncast:0.1.0 owncast/owncast:latest gabekangas/owncast:0.1.0 gabekangas/owncast:latest" --version="webv2"`
|
||||
|
||||
Omit `--push` if you don't want to push the image to Docker Hub and want to just build and test the image locally first.
|
||||
|
||||
## Update installer script
|
||||
|
||||
Once you have uploaded the release archive files and made the new files public and are confident the release is working and available you can update the installer script to point to the new release.
|
||||
|
||||
Edit the `OWNCAST_VERSION` in [`install.sh`](https://github.com/owncast/owncast.github.io/blob/master/static/install.sh).
|
||||
|
||||
## Final
|
||||
|
||||
Once the installer is pointing to the new release number and Docker Hub has new images tagged as `latest` the new version is released to the public.
|
@ -56,7 +56,6 @@ Owncast Dependencies
|
||||
|
||||
- HTTP routing https://github.com/gorilla/mux
|
||||
- Mastodon API https://github.com/mattn/go-mastodon
|
||||
- Twitter API https://github.com/ChimeraCoder/anaconda
|
||||
- Go ORM https://gorm.io/gorm
|
||||
- ID string generator https://github.com/teris-io/shortid
|
||||
- Slug generator https://github.com/metal3d/go-slugify
|
||||
|
8
go.mod
@ -3,7 +3,7 @@ module github.com/owncast/owncast
|
||||
go 1.18
|
||||
|
||||
require (
|
||||
github.com/aws/aws-sdk-go v1.44.175
|
||||
github.com/aws/aws-sdk-go v1.44.181
|
||||
github.com/go-fed/activity v1.0.1-0.20210803212804-d866ba75dd0f
|
||||
github.com/go-fed/httpsig v1.1.0
|
||||
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||
@ -11,7 +11,7 @@ require (
|
||||
github.com/grafov/m3u8 v0.11.1
|
||||
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
|
||||
github.com/mattn/go-sqlite3 v1.14.16
|
||||
github.com/microcosm-cc/bluemonday v1.0.21
|
||||
github.com/microcosm-cc/bluemonday v1.0.22
|
||||
github.com/nareix/joy5 v0.0.0-20210317075623-2c912ca30590
|
||||
github.com/oschwald/geoip2-golang v1.8.0
|
||||
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
|
||||
@ -69,15 +69,13 @@ require (
|
||||
|
||||
require (
|
||||
github.com/nakabonne/tstorage v0.3.5
|
||||
github.com/shirou/gopsutil/v3 v3.22.11
|
||||
github.com/shirou/gopsutil/v3 v3.22.12
|
||||
)
|
||||
|
||||
require github.com/SherClockHolmes/webpush-go v1.2.0
|
||||
|
||||
require (
|
||||
github.com/aymerick/douceur v0.2.0 // indirect
|
||||
github.com/dghubble/oauth1 v0.7.2
|
||||
github.com/g8rswimmer/go-twitter/v2 v2.1.5
|
||||
github.com/go-test/deep v1.0.4 // indirect
|
||||
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
|
||||
github.com/gorilla/css v1.0.0 // indirect
|
||||
|
15
go.sum
@ -42,8 +42,8 @@ github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRF
|
||||
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
|
||||
github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c=
|
||||
github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
|
||||
github.com/aws/aws-sdk-go v1.44.175 h1:c0NzHHnPXV5kJoTUFQxFN5cUPpX1SxO635XnwL5/oIY=
|
||||
github.com/aws/aws-sdk-go v1.44.175/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
|
||||
github.com/aws/aws-sdk-go v1.44.181 h1:w4OzE8bwIVo62gUTAp/uEFO2HSsUtf1pjXpSs36cluY=
|
||||
github.com/aws/aws-sdk-go v1.44.181/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
|
||||
github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
|
||||
github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
|
||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||
@ -64,14 +64,10 @@ github.com/dave/jennifer v1.3.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhr
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/dghubble/oauth1 v0.7.2 h1:pwcinOZy8z6XkNxvPmUDY52M7RDPxt0Xw1zgZ6Cl5JA=
|
||||
github.com/dghubble/oauth1 v0.7.2/go.mod h1:9erQdIhqhOHG/7K9s/tgh9Ks/AfoyrO5mW/43Lu2+kE=
|
||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/g8rswimmer/go-twitter/v2 v2.1.5 h1:Uj9Yuof2UducrP4Xva7irnUJfB9354/VyUXKmc2D5gg=
|
||||
github.com/g8rswimmer/go-twitter/v2 v2.1.5/go.mod h1:/55xWb313KQs25X7oZrNSEwLQNkYHhPsDwFstc45vhc=
|
||||
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
|
||||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
||||
github.com/gin-gonic/gin v1.7.4 h1:QmUZXrvJ9qZ3GfWvQ+2wnW/1ePrTEJqPKMYEU3lD/DM=
|
||||
@ -226,6 +222,8 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0j
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/microcosm-cc/bluemonday v1.0.21 h1:dNH3e4PSyE4vNX+KlRGHT5KrSvjeUkoNPwEORjffHJg=
|
||||
github.com/microcosm-cc/bluemonday v1.0.21/go.mod h1:ytNkv4RrDrLJ2pqlsSI46O6IVXmZOBBD4SaJyDwwTkM=
|
||||
github.com/microcosm-cc/bluemonday v1.0.22 h1:p2tT7RNzRdCi0qmwxG+HbqD6ILkmwter1ZwVZn1oTxA=
|
||||
github.com/microcosm-cc/bluemonday v1.0.22/go.mod h1:ytNkv4RrDrLJ2pqlsSI46O6IVXmZOBBD4SaJyDwwTkM=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
@ -293,8 +291,8 @@ github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XF
|
||||
github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o=
|
||||
github.com/schollz/sqlite3dump v1.3.1 h1:QXizJ7XEJ7hggjqjZ3YRtF3+javm8zKtzNByYtEkPRA=
|
||||
github.com/schollz/sqlite3dump v1.3.1/go.mod h1:mzSTjZpJH4zAb1FN3iNlhWPbbdyeBpOaTW0hukyMHyI=
|
||||
github.com/shirou/gopsutil/v3 v3.22.11 h1:kxsPKS+Eeo+VnEQ2XCaGJepeP6KY53QoRTETx3+1ndM=
|
||||
github.com/shirou/gopsutil/v3 v3.22.11/go.mod h1:xl0EeL4vXJ+hQMAGN8B9VFpxukEMA0XdevQOe5MZ1oY=
|
||||
github.com/shirou/gopsutil/v3 v3.22.12 h1:oG0ns6poeUSxf78JtOsfygNWuEHYYz8hnnNg7P04TJs=
|
||||
github.com/shirou/gopsutil/v3 v3.22.12/go.mod h1:Xd7P1kwZcp5VW52+9XsirIKd/BROzbb2wdX3Kqlz9uI=
|
||||
github.com/signalsciences/ac v1.2.0 h1:6UcueKRSJn7iHhq1vKU7R0EVhzCJf77tD6HjAGcGDSs=
|
||||
github.com/signalsciences/ac v1.2.0/go.mod h1:jnlGjtNM8dyGcnOdZjY35vHmUtOn5M5K4U+BzcVPjN0=
|
||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||
@ -492,6 +490,7 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
|
||||
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
|
@ -14,14 +14,3 @@ type BrowserNotificationConfiguration struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
GoLiveMessage string `json:"goLiveMessage,omitempty"`
|
||||
}
|
||||
|
||||
// TwitterConfiguration represents the configuration for Twitter access.
|
||||
type TwitterConfiguration struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
APIKey string `json:"apiKey"` // aka consumer key
|
||||
APISecret string `json:"apiSecret"` // aka consumer secret
|
||||
AccessToken string `json:"accessToken"`
|
||||
AccessTokenSecret string `json:"accessTokenSecret"`
|
||||
BearerToken string `json:"bearerToken"`
|
||||
GoLiveMessage string `json:"goLiveMessage,omitempty"`
|
||||
}
|
||||
|
@ -2,15 +2,12 @@ package notifications
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/owncast/owncast/config"
|
||||
"github.com/owncast/owncast/core/data"
|
||||
"github.com/owncast/owncast/models"
|
||||
"github.com/owncast/owncast/notifications/browser"
|
||||
"github.com/owncast/owncast/notifications/discord"
|
||||
"github.com/owncast/owncast/notifications/twitter"
|
||||
"github.com/owncast/owncast/utils"
|
||||
"github.com/pkg/errors"
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
@ -20,7 +17,6 @@ type Notifier struct {
|
||||
datastore *data.Datastore
|
||||
browser *browser.Browser
|
||||
discord *discord.Discord
|
||||
twitter *twitter.Twitter
|
||||
}
|
||||
|
||||
// Setup will perform any pre-use setup for the notifier.
|
||||
@ -68,9 +64,6 @@ func New(datastore *data.Datastore) (*Notifier, error) {
|
||||
if err := notifier.setupDiscord(); err != nil {
|
||||
log.Error(err)
|
||||
}
|
||||
if err := notifier.setupTwitter(); err != nil {
|
||||
log.Errorln(err)
|
||||
}
|
||||
|
||||
return ¬ifier, nil
|
||||
}
|
||||
@ -147,36 +140,6 @@ func (n *Notifier) notifyDiscord() {
|
||||
}
|
||||
}
|
||||
|
||||
func (n *Notifier) setupTwitter() error {
|
||||
if twitterConfig := data.GetTwitterConfiguration(); twitterConfig.Enabled {
|
||||
if t, err := twitter.New(twitterConfig.APIKey, twitterConfig.APISecret, twitterConfig.AccessToken, twitterConfig.AccessTokenSecret, twitterConfig.BearerToken); err == nil {
|
||||
n.twitter = t
|
||||
} else if err != nil {
|
||||
return errors.Wrap(err, "error creating twitter notifier")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (n *Notifier) notifyTwitter() {
|
||||
goLiveMessage := data.GetTwitterConfiguration().GoLiveMessage
|
||||
streamTitle := data.GetStreamTitle()
|
||||
if streamTitle != "" {
|
||||
goLiveMessage += "\n" + streamTitle
|
||||
}
|
||||
tagString := ""
|
||||
for _, tag := range utils.ShuffleStringSlice(data.GetServerMetadataTags()) {
|
||||
tagString = fmt.Sprintf("%s #%s", tagString, tag)
|
||||
}
|
||||
tagString = strings.TrimSpace(tagString)
|
||||
|
||||
message := fmt.Sprintf("%s\n%s\n\n%s", goLiveMessage, data.GetServerURL(), tagString)
|
||||
|
||||
if err := n.twitter.Notify(message); err != nil {
|
||||
log.Errorln("error sending twitter message", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Notify will fire the different notification channels.
|
||||
func (n *Notifier) Notify() {
|
||||
if n.browser != nil {
|
||||
@ -186,8 +149,4 @@ func (n *Notifier) Notify() {
|
||||
if n.discord != nil {
|
||||
n.notifyDiscord()
|
||||
}
|
||||
|
||||
if n.twitter != nil {
|
||||
n.notifyTwitter()
|
||||
}
|
||||
}
|
||||
|
@ -1,78 +0,0 @@
|
||||
package twitter
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/dghubble/oauth1"
|
||||
"github.com/g8rswimmer/go-twitter/v2"
|
||||
)
|
||||
|
||||
/*
|
||||
1. developer.twitter.com. Apply to be a developer if needed.
|
||||
2. Projects and apps -> Your project name
|
||||
3. Settings.
|
||||
4. Scroll down to"User authentication settings" Edit
|
||||
5. Enable OAuth 1.0a with Read/Write permissions.
|
||||
6. Fill out the form with your information. Callback can be anything.
|
||||
7. Go to your project "Keys and tokens"
|
||||
8. Generate API key and secret.
|
||||
9. Generate access token and secret. Verify it says "Read and write permissions."
|
||||
10. Generate bearer token.
|
||||
*/
|
||||
|
||||
type authorize struct {
|
||||
Token string
|
||||
}
|
||||
|
||||
func (a authorize) Add(req *http.Request) {
|
||||
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", a.Token))
|
||||
}
|
||||
|
||||
// Twitter is an instance of the Twitter notifier.
|
||||
type Twitter struct {
|
||||
apiKey string
|
||||
apiSecret string
|
||||
accessToken string
|
||||
accessTokenSecret string
|
||||
bearerToken string
|
||||
}
|
||||
|
||||
// New returns a new instance of the Twitter notifier.
|
||||
func New(apiKey, apiSecret, accessToken, accessTokenSecret, bearerToken string) (*Twitter, error) {
|
||||
if apiKey == "" || apiSecret == "" || accessToken == "" || accessTokenSecret == "" || bearerToken == "" {
|
||||
return nil, errors.New("missing some or all of the required twitter configuration values")
|
||||
}
|
||||
|
||||
return &Twitter{
|
||||
apiKey: apiKey,
|
||||
apiSecret: apiSecret,
|
||||
accessToken: accessToken,
|
||||
accessTokenSecret: accessTokenSecret,
|
||||
bearerToken: bearerToken,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Notify will send a notification to Twitter with the supplied text.
|
||||
func (t *Twitter) Notify(text string) error {
|
||||
config := oauth1.NewConfig(t.apiKey, t.apiSecret)
|
||||
token := oauth1.NewToken(t.accessToken, t.accessTokenSecret)
|
||||
httpClient := config.Client(oauth1.NoContext, token)
|
||||
|
||||
client := &twitter.Client{
|
||||
Authorizer: authorize{
|
||||
Token: t.bearerToken,
|
||||
},
|
||||
Client: httpClient,
|
||||
Host: "https://api.twitter.com",
|
||||
}
|
||||
|
||||
req := twitter.CreateTweetRequest{
|
||||
Text: text,
|
||||
}
|
||||
|
||||
_, err := client.CreateTweet(context.Background(), req)
|
||||
return err
|
||||
}
|
246
openapi.yaml
@ -1,8 +1,8 @@
|
||||
openapi: 3.0.1
|
||||
info:
|
||||
title: Owncast
|
||||
description: Owncast is a self-hosted live video and web chat server for use with existing popular broadcasting software.
|
||||
version: '0.0.13'
|
||||
description: Owncast is a self-hosted live video and web chat server for use with existing popular broadcasting software. <br/><br/>Take note that only APIs listed specifically for external use, 3rd parties or for integration purposes are encouraged for external use. Internal APIs may change at any time and are used by the server and frontend itself.
|
||||
version: '0.1.0'
|
||||
contact:
|
||||
name: Gabe Kangas
|
||||
email: gabek@real-ity.com
|
||||
@ -43,6 +43,16 @@ components:
|
||||
items:
|
||||
$ref: '#/components/schemas/Follower'
|
||||
|
||||
StreamKeyArray:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/StreamKey'
|
||||
|
||||
ChatMessageArray:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/ChatMessage'
|
||||
|
||||
Client:
|
||||
type: object
|
||||
description: A single representation of a client.
|
||||
@ -96,6 +106,7 @@ components:
|
||||
type: boolean
|
||||
message:
|
||||
type: string
|
||||
|
||||
InstanceDetails:
|
||||
type: object
|
||||
description: User-facing details about this server.
|
||||
@ -240,6 +251,7 @@ components:
|
||||
message:
|
||||
type: string
|
||||
description: 'The log entry contents'
|
||||
|
||||
Webhook:
|
||||
type: object
|
||||
properties:
|
||||
@ -341,11 +353,43 @@ components:
|
||||
FEDIVERSE_ENGAGEMENT_REPOST,
|
||||
]
|
||||
|
||||
StreamKey:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: The key used for authing a stream.
|
||||
example: yklw5Imng
|
||||
comment:
|
||||
type: string
|
||||
description: The user-facing description or explanation of this single key
|
||||
example: Used by Tim.
|
||||
|
||||
ChatMessage:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
user:
|
||||
$ref: '#/components/schemas/User'
|
||||
body:
|
||||
type: string
|
||||
description: Escaped HTML of the chat message content.
|
||||
id:
|
||||
type: string
|
||||
description: Unique ID of the chat message.
|
||||
visible:
|
||||
type: boolean
|
||||
description: 'Should chat message be visibly rendered.'
|
||||
timestamp:
|
||||
type: string
|
||||
format: date-time
|
||||
|
||||
securitySchemes:
|
||||
AdminBasicAuth:
|
||||
type: http
|
||||
scheme: basic
|
||||
description: The username for admin basic auth is `admin` and the password is the stream key.
|
||||
description: The username for admin basic auth is `admin`. Defaults to abc123.
|
||||
AccessToken:
|
||||
type: http
|
||||
scheme: bearer
|
||||
@ -512,6 +556,20 @@ paths:
|
||||
sessionMaxViewerCount: 12
|
||||
viewerCount: 7
|
||||
|
||||
/api/customjavascript:
|
||||
get:
|
||||
summary: Custom Javascript to execute.
|
||||
description: Returns custom Javascript that was set in the Owncast admin to be run in the Owncast frontend.
|
||||
tags: ['Server']
|
||||
responses:
|
||||
'200':
|
||||
description: ''
|
||||
content:
|
||||
application/javascript:
|
||||
schema:
|
||||
type: string
|
||||
example: console.log("Hello World");
|
||||
|
||||
/api/chat/register:
|
||||
post:
|
||||
summary: Register a chat user
|
||||
@ -560,24 +618,7 @@ paths:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
user:
|
||||
$ref: '#/components/schemas/User'
|
||||
body:
|
||||
type: string
|
||||
description: Escaped HTML of the chat message content.
|
||||
id:
|
||||
type: string
|
||||
description: Unique ID of the chat message.
|
||||
visible:
|
||||
type: boolean
|
||||
description: 'Should chat message be visibly rendered.'
|
||||
timestamp:
|
||||
type: string
|
||||
format: date-time
|
||||
$ref: '#/components/schemas/ChatMessageArray'
|
||||
|
||||
/api/yp:
|
||||
get:
|
||||
@ -617,6 +658,23 @@ paths:
|
||||
nullable: true
|
||||
format: date-time
|
||||
|
||||
/img/emoji/:
|
||||
get:
|
||||
parameters:
|
||||
- name: name
|
||||
in: path
|
||||
description: Emoji image name
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
example: test.svg
|
||||
summary: Get Emoji Image
|
||||
description: Get an emoji image.
|
||||
tags: ['Chat']
|
||||
responses:
|
||||
'200':
|
||||
description: 'Returns a single image'
|
||||
|
||||
/api/emoji:
|
||||
get:
|
||||
summary: Get Custom Emoji
|
||||
@ -1000,10 +1058,9 @@ paths:
|
||||
'200':
|
||||
$ref: '#/components/responses/BasicResponse'
|
||||
|
||||
/api/admin/config/key:
|
||||
/api/admin/config/adminpass:
|
||||
post:
|
||||
summary: Set the stream key.
|
||||
description: Set the stream key. Also used as the admin password.
|
||||
summary: Set the admin password.
|
||||
tags: ['Admin']
|
||||
security:
|
||||
- AdminBasicAuth: []
|
||||
@ -1016,6 +1073,21 @@ paths:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ConfigValue'
|
||||
|
||||
/api/admin/config/streamkeys:
|
||||
post:
|
||||
summary: Set the stream keys.
|
||||
tags: ['Admin']
|
||||
security:
|
||||
- AdminBasicAuth: []
|
||||
responses:
|
||||
'200':
|
||||
$ref: '#/components/responses/BasicResponse'
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/StreamKeyArray'
|
||||
|
||||
/api/admin/config/pagecontent:
|
||||
post:
|
||||
summary: Set the custom page content.
|
||||
@ -1085,6 +1157,24 @@ paths:
|
||||
example:
|
||||
value: The best in Desert Bus Streaming
|
||||
|
||||
/api/admin/config/offlinemessage:
|
||||
post:
|
||||
summary: Set the offline message.
|
||||
description: Set the message that is displayed when a stream is not live.
|
||||
tags: ['Admin']
|
||||
security:
|
||||
- AdminBasicAuth: []
|
||||
responses:
|
||||
'200':
|
||||
$ref: '#/components/responses/BasicResponse'
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ConfigValue'
|
||||
example:
|
||||
value: Come back on Friday at 2pm, I'll be streaming then.
|
||||
|
||||
/api/admin/config/logo:
|
||||
post:
|
||||
summary: Set the server logo.
|
||||
@ -1349,6 +1439,7 @@ paths:
|
||||
url: https://github.com/owncast/owncast
|
||||
- platform: mastodon
|
||||
url: https://mastodon.social/@gabek
|
||||
|
||||
/api/admin/config/customstyles:
|
||||
post:
|
||||
summary: Custom CSS styles to be used in the web front endpoints.
|
||||
@ -1365,6 +1456,43 @@ paths:
|
||||
example:
|
||||
value: 'body { color: orange; background: black; }'
|
||||
|
||||
/api/admin/config/customjavascript:
|
||||
post:
|
||||
summary: Custom Javascript to be inserted into the frontend
|
||||
description: Save a string containing Javascript to be inserted in to the web frontend page.
|
||||
tags: ['Admin']
|
||||
responses:
|
||||
'200':
|
||||
$ref: '#/components/responses/BasicResponse'
|
||||
requestBody:
|
||||
content:
|
||||
application/javascript:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ConfigValue'
|
||||
example:
|
||||
value: console.log('Hello world.');
|
||||
|
||||
/api/admin/config/appearance:
|
||||
post:
|
||||
summary: Save a map of variables and values to be used in the frontend.
|
||||
description: These values will override the default values in the frontend.
|
||||
tags: ['Admin']
|
||||
responses:
|
||||
'200':
|
||||
$ref: '#/components/responses/BasicResponse'
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
value:
|
||||
type: object
|
||||
example:
|
||||
value:
|
||||
theme-color-components-primary-button-background: '#ff0000'
|
||||
theme-color-components-chat-background: '#000000'
|
||||
|
||||
/api/admin/viewersOverTime:
|
||||
get:
|
||||
summary: Viewers Over Time
|
||||
@ -1441,6 +1569,21 @@ paths:
|
||||
- time: '2020-10-03T21:43:00.381996-05:00'
|
||||
value: 11
|
||||
|
||||
/api/admin/config/hideviewercount:
|
||||
post:
|
||||
summary: Enable or disable showing the viewer count.
|
||||
tags: ['Admin']
|
||||
security:
|
||||
- AdminBasicAuth: []
|
||||
responses:
|
||||
'200':
|
||||
$ref: '#/components/responses/BasicResponse'
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/BooleanValue'
|
||||
|
||||
/api/admin/config/federation/enable:
|
||||
post:
|
||||
summary: Enable or disable federated social features.
|
||||
@ -1568,6 +1711,33 @@ paths:
|
||||
items:
|
||||
$ref: '#/components/schemas/FederatedAction'
|
||||
|
||||
/api/admin/emoji/upload:
|
||||
post:
|
||||
summary: Upload a single emoji image.
|
||||
tags: ['Admin']
|
||||
security:
|
||||
- AdminBasicAuth: []
|
||||
responses:
|
||||
'200':
|
||||
$ref: '#/components/responses/BasicResponse'
|
||||
|
||||
/api/admin/emoji/delete:
|
||||
post:
|
||||
summary: Delete a single emoji image.
|
||||
tags: ['Admin']
|
||||
security:
|
||||
- AdminBasicAuth: []
|
||||
responses:
|
||||
'200':
|
||||
$ref: '#/components/responses/BasicResponse'
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
example:
|
||||
name: test.svg
|
||||
|
||||
/api/integrations/streamtitle:
|
||||
post:
|
||||
summary: Set the stream title.
|
||||
@ -2050,6 +2220,34 @@ paths:
|
||||
items:
|
||||
$ref: '#/components/schemas/User'
|
||||
|
||||
/api/moderation/chat/user/:
|
||||
get:
|
||||
tags: ['Moderation']
|
||||
parameters:
|
||||
- name: name
|
||||
in: path
|
||||
description: User ID
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
example: USER-ID
|
||||
responses:
|
||||
'200':
|
||||
description: User
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
user:
|
||||
$ref: '#/components/schemas/User'
|
||||
connectClients:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/Client'
|
||||
messages:
|
||||
$ref: '#/components/schemas/ChatMessageArray'
|
||||
|
||||
/api/admin/followers:
|
||||
get:
|
||||
tags: ['Admin']
|
||||
|
@ -39,6 +39,9 @@ func Start() error {
|
||||
http.HandleFunc("/preview.gif", controllers.GetPreview)
|
||||
http.HandleFunc("/logo", controllers.GetLogo)
|
||||
|
||||
// Custom Javascript
|
||||
http.HandleFunc("/customjavascript", controllers.ServeCustomJavascript)
|
||||
|
||||
// Return a single emoji image.
|
||||
http.HandleFunc(config.EmojiDir, controllers.GetCustomEmojiImage)
|
||||
|
||||
@ -315,6 +318,9 @@ func Start() error {
|
||||
// set custom style css
|
||||
http.HandleFunc("/api/admin/config/customstyles", middleware.RequireAdminAuth(admin.SetCustomStyles))
|
||||
|
||||
// set custom style javascript
|
||||
http.HandleFunc("/api/admin/config/customjavascript", middleware.RequireAdminAuth(admin.SetCustomJavascript))
|
||||
|
||||
// Video playback metrics
|
||||
http.HandleFunc("/api/admin/metrics/video", middleware.RequireAdminAuth(admin.GetVideoPlaybackMetrics))
|
||||
|
||||
@ -366,7 +372,6 @@ func Start() error {
|
||||
// Configure outbound notification channels.
|
||||
http.HandleFunc("/api/admin/config/notifications/discord", middleware.RequireAdminAuth(admin.SetDiscordNotificationConfiguration))
|
||||
http.HandleFunc("/api/admin/config/notifications/browser", middleware.RequireAdminAuth(admin.SetBrowserNotificationConfiguration))
|
||||
http.HandleFunc("/api/admin/config/notifications/twitter", middleware.RequireAdminAuth(admin.SetTwitterConfiguration))
|
||||
|
||||
// Auth
|
||||
|
||||
@ -387,7 +392,7 @@ func Start() error {
|
||||
})
|
||||
|
||||
// Optional public static files
|
||||
http.Handle("/public/", http.StripPrefix("/public/", http.FileServer(http.Dir("./public"))))
|
||||
http.Handle("/public/", http.StripPrefix("/public/", http.FileServer(http.Dir(config.PublicFilesPath))))
|
||||
|
||||
port := config.WebServerPort
|
||||
ip := config.WebServerIP
|
||||
|
@ -1 +0,0 @@
|
||||
self.__MIDDLEWARE_MANIFEST=[];self.__MIDDLEWARE_MANIFEST_CB&&self.__MIDDLEWARE_MANIFEST_CB()
|
1
static/img/emoji/mutant/8_ball.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41421" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><circle cx="16" cy="16" r="16"/><path d="m15.469 2.01c.176-.007.353-.01.531-.01 7.727 0 14 6.273 14 14s-6.273 14-14 14-14-6.273-14-14c0-.178.003-.355.01-.531 2.255.371 13.83-11.204 13.459-13.459z" fill="#333"/><path d="m15.469 2.01c.371 2.255-1.34 5.861-4.469 8.99s-6.735 4.84-8.99 4.469c.273-7.305 6.154-13.186 13.459-13.459z" fill="#4c4c4c"/><path d="m25 16c0 4.967-4.033 9-9 9s-9-4.033-9-9 4.033-9 9-9 9 4.033 9 9z" fill="#fff"/><path d="m16 21.958c-1.216 0-2.187-.309-2.912-.929-.725-.619-1.088-1.459-1.088-2.519v-.234c0-.558.142-1.063.427-1.514.284-.452.683-.801 1.196-1.047-.424-.212-.758-.518-1.004-.92-.245-.402-.368-.859-.368-1.372v-.185c0-.624.151-1.179.452-1.665.301-.485.736-.862 1.305-1.129.569-.268 1.239-.402 2.009-.402s1.439.134 2.008.402c.569.267 1.004.644 1.306 1.129.301.486.451 1.041.451 1.665v.185c0 .502-.125.956-.376 1.364-.251.407-.589.716-1.013.928.514.257.91.611 1.189 1.063s.418.946.418 1.481v.235c0 1.071-.363 1.916-1.088 2.535-.725.62-1.696.929-2.912.929zm.017-7.113c.513 0 .909-.125 1.188-.376s.418-.595.418-1.03v-.184c0-.424-.142-.756-.426-.996-.285-.239-.678-.359-1.18-.359-.514 0-.912.12-1.197.359-.284.24-.427.572-.427.996v.184c0 .435.14.779.419 1.03s.68.376 1.205.376zm0 5.255c.58 0 1.032-.142 1.355-.426.324-.285.486-.684.486-1.197v-.251c0-.491-.162-.876-.486-1.155-.323-.279-.775-.418-1.355-.418s-1.035.139-1.364.418-.494.664-.494 1.155v.251c0 .513.162.912.485 1.197.324.284.781.426 1.373.426z" fill-rule="nonzero"/></g></svg>
|
After Width: | Height: | Size: 1.8 KiB |
11
static/img/emoji/mutant/LICENSE.md
Normal file
@ -0,0 +1,11 @@
|
||||
Mutant Remix emoji
|
||||
April 2021 (Release v1.0)
|
||||
mutant.revolt.chat
|
||||
|
||||
Published 2021.04.30 (GMT)
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Mutant Standard made by Dzuk (noct.zone), stylistic changes by nizune.
|
||||
|
||||
Mutant Remix emoji are licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. (creativecommons.org/licenses/by-nc-sa/4.0/)
|
1
static/img/emoji/mutant/alien.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 .017h32v32h-32z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m18.46 19.556v-.433c0-1.763.701-3.453 1.947-4.699 1.246-1.247 2.937-1.947 4.699-1.947h.434v.433c0 1.763-.701 3.453-1.947 4.7-1.246 1.246-2.937 1.946-4.699 1.946z"/></clipPath><clipPath id="c"><path clip-rule="evenodd" d="m13.625 19.642v-.604c0-1.763-.7-3.453-1.947-4.7-1.246-1.246-2.937-1.946-4.699-1.946h-.604v.604c0 1.762.7 3.453 1.947 4.699 1.246 1.246 2.937 1.947 4.699 1.947z"/></clipPath><path d="m0 .017h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m3.812 11.317c-1.113 4.73.505 9.685 4.194 12.848 1.886 1.616 3.871 3.318 5.391 4.62 1.498 1.284 3.708 1.284 5.206 0 1.52-1.302 3.505-3.004 5.391-4.62 3.689-3.163 5.307-8.118 4.194-12.848-.004-.016-.007-.033-.011-.049-1.276-5.42-6.113-9.251-11.681-9.251h-.992c-5.568 0-10.405 3.831-11.681 9.251-.004.016-.007.033-.011.049z" fill="none" stroke="#000" stroke-width="4"/><path d="m3.812 11.317c-1.113 4.73.505 9.685 4.194 12.848 1.886 1.616 3.871 3.318 5.391 4.62 1.498 1.284 3.708 1.284 5.206 0 1.52-1.302 3.505-3.004 5.391-4.62 3.689-3.163 5.307-8.118 4.194-12.848-.004-.016-.007-.033-.011-.049-1.276-5.42-6.113-9.251-11.681-9.251h-.992c-5.568 0-10.405 3.831-11.681 9.251-.004.016-.007.033-.011.049z" fill="#89c794"/><path d="m18.46 19.556v-.433c0-1.763.701-3.453 1.947-4.699 1.246-1.247 2.937-1.947 4.699-1.947h.434v.433c0 1.763-.701 3.453-1.947 4.7-1.246 1.246-2.937 1.946-4.699 1.946z"/><g clip-path="url(#b)"><path d="m17 19.017h1c2.761 0 5-2.239 5-5 0-2.072 0-4 0-4h-6z" fill="#666"/></g><path d="m13.625 19.642v-.604c0-1.763-.7-3.453-1.947-4.7-1.246-1.246-2.937-1.946-4.699-1.946h-.604v.604c0 1.762.7 3.453 1.947 4.699 1.246 1.246 2.937 1.947 4.699 1.947z"/><g clip-path="url(#c)"><path d="m6 13.017h.002c1.326 0 2.597.526 3.534 1.464.937.937 1.464 2.208 1.464 3.534v3.002h-5z" fill="#666"/></g><path d="m19.354 20.017h-1.354v-1.354c0-3.671 2.976-6.646 6.646-6.646h1.354v1.354c0 3.67-2.976 6.646-6.646 6.646zm5.646-7h-.354c-3.118 0-5.646 2.527-5.646 5.646v.354h.354c3.118 0 5.646-2.528 5.646-5.646z"/><path d="m7.354 12.017c3.67 0 6.646 2.975 6.646 6.646v1.354h-1.354c-3.67 0-6.646-2.976-6.646-6.646v-1.354zm0 1h-.354v.354c0 3.118 2.528 5.646 5.646 5.646h.354v-.354c0-3.119-2.528-5.646-5.646-5.646z"/><path d="m13 25.017 3-3 3 3" fill="none" stroke="#3f854b" stroke-width="2"/></g></svg>
|
After Width: | Height: | Size: 2.5 KiB |
1
static/img/emoji/mutant/american_football.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m4 30c-.53 0-1.039-.211-1.414-.586s-.586-.884-.586-1.414c0-.811 0-1.833 0-3 0-12.703 10.297-23 23-23h3c.53 0 1.039.211 1.414.586s.586.884.586 1.414v3c0 12.703-10.297 23-23 23-1.167 0-2.189 0-3 0z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m4 30c-.53 0-1.039-.211-1.414-.586s-.586-.884-.586-1.414c0-.811 0-1.833 0-3 0-12.703 10.297-23 23-23h3c.53 0 1.039.211 1.414.586s.586.884.586 1.414v3c0 12.703-10.297 23-23 23-1.167 0-2.189 0-3 0z" fill="none" stroke="#000" stroke-width="4"/><path d="m4 30c-.53 0-1.039-.211-1.414-.586s-.586-.884-.586-1.414c0-.811 0-1.833 0-3 0-12.703 10.297-23 23-23h3c.53 0 1.039.211 1.414.586s.586.884.586 1.414v3c0 12.703-10.297 23-23 23-1.167 0-2.189 0-3 0z" fill="#a65c2f"/><g clip-path="url(#b)"><path d="m21 0v.001c-2.451 10.416-10.583 18.548-20.999 20.999-.001 0-.001 0-.001 0v-21z" fill="#b96d3e"/><g fill="none"><path d="m1 31 30-30" stroke="#7f4724" stroke-width="2"/><path d="m7.918 24.082c4.412 4.412 5.402 10.586 2.21 13.779-3.193 3.193-9.367 2.203-13.78-2.209-4.412-4.413-5.402-10.587-2.209-13.78 3.193-3.192 9.367-2.202 13.779 2.21z" stroke="#fff" stroke-width="3"/><path d="m35.652-3.652c4.412 4.413 5.402 10.587 2.209 13.78-3.193 3.192-9.367 2.202-13.779-2.21s-5.402-10.586-2.21-13.779c3.193-3.193 9.367-2.203 13.78 2.209z" stroke="#fff" stroke-width="3"/></g></g><path d="m19.293 11.293-.939-.939c-.094-.094-.147-.221-.147-.354s.053-.26.147-.354c.095-.095.197-.197.292-.292.094-.094.221-.147.354-.147s.26.053.354.147c.758.758 2.534 2.534 3.292 3.292.094.094.147.221.147.354s-.053.26-.147.354c-.095.095-.197.197-.292.292-.094.094-.221.147-.354.147s-.26-.053-.354-.147l-.939-.939-2 2 .939.939c.094.094.147.221.147.354s-.053.26-.147.354c-.095.095-.197.197-.292.292-.094.094-.221.147-.354.147s-.26-.053-.354-.147l-.939-.939-2 2 .939.939c.094.094.147.221.147.354s-.053.26-.147.354c-.095.095-.197.197-.292.292-.094.094-.221.147-.354.147s-.26-.053-.354-.147l-.939-.939-2 2 .939.939c.094.094.147.221.147.354s-.053.26-.147.354c-.095.095-.197.197-.292.292-.094.094-.221.147-.354.147s-.26-.053-.354-.147c-.758-.758-2.534-2.534-3.292-3.292-.094-.094-.147-.221-.147-.354s.053-.26.147-.354l.292-.292c.094-.094.221-.147.354-.147s.26.053.354.147l.939.939 2-2-.939-.939c-.094-.094-.147-.221-.147-.354s.053-.26.147-.354c.095-.095.197-.197.292-.292.094-.094.221-.147.354-.147s.26.053.354.147l.939.939 2-2-.939-.939c-.094-.094-.147-.221-.147-.354s.053-.26.147-.354l.292-.292c.094-.094.221-.147.354-.147s.26.053.354.147l.939.939z" fill="#fff"/></g></svg>
|
After Width: | Height: | Size: 2.8 KiB |
1
static/img/emoji/mutant/arms_in_the_air.svg
Normal file
After Width: | Height: | Size: 5.3 KiB |
1
static/img/emoji/mutant/artist.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41421" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m16 11h12v19h-12z"/></clipPath><clipPath id="c"><path clip-rule="evenodd" d="m18 15c0-1.591-.632-3.117-1.757-4.243-1.126-1.125-2.652-1.757-4.243-1.757-1.591 0-3.117.632-4.243 1.757-1.125 1.126-1.757 2.652-1.757 4.243v2c0 1.591.632 3.117 1.757 4.243 1.126 1.125 2.652 1.757 4.243 1.757 1.591 0 3.117-.632 4.243-1.757 1.125-1.126 1.757-2.652 1.757-4.243 0-.663 0-1.337 0-2z"/></clipPath><clipPath id="d"><path clip-rule="evenodd" d="m24 18c-1.657 0-3 1.343-3 3v3c1.657 0 3-1.343 3-3 0-1.5 0-3 0-3z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m14 9h16v23h-16z" fill-rule="nonzero"/><path d="m16 11h12v19h-12z" fill="#fff"/><g clip-path="url(#b)"><path d="m23 14c.343 0 .685-.003 1.028.001.075.003.15.007.225.014.323.036.636.115.934.246.757.336 1.355.98 1.635 1.759.092.258.149.528.17.802.005.073.008.146.008.22 0 .065-.001.128.004.193.005.041.012.082.022.123.073.279.281.508.556.599.08.026.162.04.246.043h.027 1.145v8.5h-3v-4.514c.005-.198.031-.391.09-.581.148-.477.477-.889.91-1.137v-.398c-.06-.018-.118-.039-.177-.061-.064-.026-.128-.053-.191-.082-.21-.102-.408-.224-.589-.372-.47-.386-.809-.92-.957-1.51-.046-.181-.073-.366-.083-.553-.005-.107.001-.214-.006-.322-.004-.043-.009-.085-.017-.127-.024-.109-.061-.214-.116-.311-.127-.225-.337-.398-.583-.479-.098-.032-.2-.049-.303-.053h-.032-2.946v-6h2z" fill="#a746ec" fill-rule="nonzero"/></g><path d="m7.043 23.279c-.167-.132-.329-.271-.486-.416-.769-.714-1.395-1.579-1.831-2.533-.326-.712-.546-1.471-.652-2.246-.045-.327-.067-.655-.073-.985-.005-.733-.005-1.465 0-2.198.005-.264.019-.527.048-.79.069-.616.21-1.224.419-1.808.431-1.204 1.153-2.297 2.089-3.166.815-.757 1.787-1.339 2.838-1.701.807-.278 1.652-.42 2.506-.435.099-.001.099-.001.198 0 .854.015 1.699.157 2.506.435 1.302.449 2.48 1.236 3.391 2.268.671.759 1.194 1.645 1.535 2.598.3.835.452 1.712.468 2.598.005.733.005 1.467 0 2.2-.005.296-.023.592-.06.886-.005.04-.01.079-.016.119.185-.261.395-.503.627-.724.495-.473 1.088-.842 1.731-1.077.35-.128.715-.217 1.085-.264.168-.021.337-.032.506-.039l2.128-.026v5.038c-.002.165-.009.33-.026.496-.037.372-.117.74-.237 1.094-.181.536-.455 1.04-.804 1.485-.27.343-.585.65-.933.911v7.001h-22c0-.725-.011-1.45.002-2.175.023-.746.156-1.483.408-2.186.523-1.463 1.537-2.728 2.849-3.557.433-.273.897-.499 1.379-.672.134-.048.269-.092.405-.131z"/><path d="m19 27c.628.835 1 1.874 1 3h-1l-1-1.5z" fill="#333"/><path d="m19 30h-15c0-2.47 1.791-4.522 4.146-4.927.469 1.687 7.239 1.687 7.708 0 1.282.22 2.396.929 3.146 1.927z" fill="#999"/><path d="m8.146 25.073c.277-.048.563-.073.854-.073h6c.291 0 .577.025.854.073-.469 1.687-2.018 2.927-3.854 2.927s-3.385-1.24-3.854-2.927z" fill="#5963ef"/><path d="m18 15c0-1.591-.632-3.117-1.757-4.243-1.126-1.125-2.652-1.757-4.243-1.757-1.591 0-3.117.632-4.243 1.757-1.125 1.126-1.757 2.652-1.757 4.243v2c0 1.591.632 3.117 1.757 4.243 1.126 1.125 2.652 1.757 4.243 1.757 1.591 0 3.117-.632 4.243-1.757 1.125-1.126 1.757-2.652 1.757-4.243 0-.663 0-1.337 0-2z" fill="#5963ef"/><g clip-path="url(#c)"><path d="m16 15c0-.552-.448-1-1-1s-1 .448-1 1v1c0 .552.448 1 1 1s1-.448 1-1c0-.322 0-.678 0-1zm-6 0c0-.552-.448-1-1-1s-1 .448-1 1v1c0 .552.448 1 1 1s1-.448 1-1c0-.322 0-.678 0-1z"/></g><path d="m21 23h1v7h-1z" fill="#705c32"/><path d="m24 18c-1.657 0-3 1.343-3 3v3c1.657 0 3-1.343 3-3 0-1.5 0-3 0-3z" fill="#bfaf91"/><g clip-path="url(#d)"><path d="m19.5 17.143h5.25v3.429h-5.25z" fill="#7731a6"/></g></g></svg>
|
After Width: | Height: | Size: 3.7 KiB |
1
static/img/emoji/mutant/astronaut.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41421" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m22.229 24.523c1.643.819 2.771 2.516 2.771 4.477v1h-18s0-.403 0-1c0-1.96 1.128-3.657 2.771-4.477.621.381 11.872.36 12.458 0z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m25 14c0-2.122-.843-4.157-2.343-5.657s-3.535-2.343-5.657-2.343c-.664 0-1.336 0-2 0-2.122 0-4.157.843-5.657 2.343s-2.343 3.535-2.343 5.657v2c0 2.122.843 4.157 2.343 5.657s3.535 2.343 5.657 2.343h2c2.122 0 4.157-.843 5.657-2.343s2.343-3.535 2.343-5.657c0-.664 0-1.336 0-2z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><path d="m8.068 23.208c-.017-.017-.034-.033-.051-.05-1.084-1.057-1.921-2.36-2.431-3.786-.248-.692-.419-1.41-.51-2.139-.046-.368-.068-.738-.075-1.109-.005-.749-.005-1.499 0-2.248.007-.371.029-.741.075-1.109.091-.729.262-1.448.51-2.139.51-1.426 1.347-2.729 2.431-3.786 1.054-1.028 2.334-1.817 3.726-2.297.695-.239 1.416-.402 2.146-.483.328-.037.657-.055.987-.061.749-.005 1.499-.005 2.248 0 .33.006.659.024.987.061.77.086 1.531.262 2.261.524 1.465.524 2.8 1.393 3.872 2.521.987 1.036 1.745 2.284 2.211 3.636.239.695.402 1.416.483 2.146.037.328.055.657.061.987.005.749.005 1.499 0 2.248-.006.33-.024.659-.061.987-.081.73-.244 1.451-.483 2.146-.466 1.352-1.224 2.6-2.211 3.636-.102.108-.206.212-.312.315.179.122.354.253.521.391 1.135.936 1.96 2.228 2.327 3.653.146.57.216 1.154.22 1.742v3.006h-22c0-1.06-.017-2.12.002-3.18.01-.296.034-.59.079-.883.095-.627.277-1.241.538-1.819.53-1.172 1.386-2.187 2.449-2.91z"/><path d="m22.229 24.523c1.643.819 2.771 2.516 2.771 4.477v1h-18s0-.403 0-1c0-1.96 1.128-3.657 2.771-4.477.621.381 11.872.36 12.458 0z" fill="#fff"/><g clip-path="url(#a)"><path d="m14 25h4v6h-4z" fill="#878787"/></g><path d="m9.771 24.523c.671-.335 1.428-.523 2.229-.523h8c.801 0 1.558.188 2.229.523-.586.36-1.209.659-1.857.891-.73.262-1.491.438-2.261.524-.328.037-.657.055-.987.061-.749.005-1.499.005-2.248 0-.33-.006-.659-.024-.987-.061-.73-.081-1.451-.244-2.146-.483-.689-.238-1.351-.551-1.972-.932z" fill="#5f5f5f"/><path d="m25 14c0-2.122-.843-4.157-2.343-5.657s-3.535-2.343-5.657-2.343c-.664 0-1.336 0-2 0-2.122 0-4.157.843-5.657 2.343s-2.343 3.535-2.343 5.657v2c0 2.122.843 4.157 2.343 5.657s3.535 2.343 5.657 2.343h2c2.122 0 4.157-.843 5.657-2.343s2.343-3.535 2.343-5.657c0-.664 0-1.336 0-2z" fill="#333"/><g clip-path="url(#b)"><path d="m10 16.472.5-2.472 2.5-3h6l2.5 3 .5 2.465v.535c0 1.591-.632 3.117-1.757 4.243-1.126 1.125-2.652 1.757-4.243 1.757-1.591 0-3.117-.632-4.243-1.757-1.125-1.126-1.757-2.652-1.757-4.243z" fill="#a3a9ff"/><path d="m10 16.472v-1.472c0-1.591.632-3.117 1.757-4.243 1.126-1.125 2.652-1.757 4.243-1.757 1.591 0 3.117.632 4.243 1.757 1.125 1.126 1.757 2.652 1.757 4.243v1.465c-.296-.595-.592-1.189-.895-1.78-.205-.386-.453-.745-.749-1.068-.658-.717-1.526-1.232-2.47-1.468-.369-.092-.744-.138-1.123-.148-.509-.005-1.017-.005-1.526 0-.379.01-.754.056-1.123.148-.973.243-1.862.783-2.528 1.533-.293.33-.535.697-.736 1.09z" fill="#343394"/><path d="m20 15c0-.552-.448-1-1-1s-1 .448-1 1v1c0 .552.448 1 1 1s1-.448 1-1c0-.322 0-.678 0-1zm-6 0c0-.552-.448-1-1-1s-1 .448-1 1v1c0 .552.448 1 1 1s1-.448 1-1c0-.322 0-.678 0-1z"/><path d="m8 16s.485-.97 1.065-2.13c1.186-2.372 3.61-3.87 6.261-3.87h1.348c2.651 0 5.075 1.498 6.261 3.87.58 1.16 1.065 2.13 1.065 2.13h3v-12h-22v12z" fill="#ababab"/></g></svg>
|
After Width: | Height: | Size: 3.4 KiB |
1
static/img/emoji/mutant/back_of_hand_clw.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m24 0v5.172l3.061-3.062c.313.13.626.259.939.389v12.001c0 2.158.013 4.315 0 6.473v.027l-.001.117c-.003.142-.007.283-.013.424-.021.372-.057.742-.113 1.111-.124.809-.338 1.604-.638 2.366-.602 1.526-1.549 2.91-2.749 4.028-1.073.999-2.344 1.78-3.72 2.284-.946.347-1.94.562-2.945.638-.262.02-.525.029-.787.032h-1.032-.004c-.16-.001-.159-.001-.32-.006-.271-.012-.542-.031-.813-.064-.533-.066-1.06-.178-1.574-.335-1.731-.53-3.29-1.569-4.444-2.964-.449-.542-.827-1.134-1.148-1.76l-6.359-12.719 1.753-.935.162-.078c.15-.069.301-.135.455-.193.353-.134.718-.237 1.089-.307.977-.185 1.994-.139 2.951.13.425.119.834.283 1.227.484-.005-2.175-.003-4.349.024-6.524.004-.099.004-.098.01-.198.023-.261.064-.519.135-.772.13-.471.348-.917.639-1.31.115-.156.242-.302.378-.44l4.009-4.009h1.828v1.172l1.172-1.172h2.828v2.172l2.172-2.172h1.828z"/><path d="m26 20.975c0 4.984-4.041 9.025-9.025 9.025h-.968c-2.762 0-5.287-1.561-6.523-4.031-2.221-4.443-5.484-10.969-5.484-10.969l.013-.007c1.693-.839 3.663-.507 4.987.689l.786 2.318 1.214 1v-12.172c.001-.164.02-.328.06-.487.088-.349.271-.672.526-.927.805-.805 1.609-1.609 2.414-2.414v11h1v-8.172c.001-.164.02-.328.06-.487.088-.349.271-.672.526-.927.805-.805 1.609-1.609 2.414-2.414v13h1v-8.172c.001-.164.02-.328.06-.487.088-.349.271-.672.526-.927.805-.805 1.609-1.609 2.414-2.414v13h1v-6.172c.001-.164.02-.328.06-.487.088-.349.271-.672.526-.927.805-.805 1.609-1.609 2.414-2.414z" fill="#a3a9ff"/><path d="m11 20c0 .14-.029.278-.086.406-.053.119-.13.228-.224.318-.09.086-.197.155-.312.202-.106.043-.219.068-.333.073-.109.005-.219-.008-.325-.039-.093-.027-.182-.068-.264-.121-.181-.117-.321-.293-.395-.495-.041-.11-.061-.227-.061-.344v-4.318c.401.362.743.805 1 1.318.551 1.101 1 2 1 2z" fill="#8484f6"/></g></svg>
|
After Width: | Height: | Size: 2.0 KiB |
1
static/img/emoji/mutant/back_of_hand_hoof.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m31 19c0 3.448-1.37 6.754-3.808 9.192s-5.744 3.808-9.192 3.808h-1.789c-5.154 0-9.967-2.566-12.841-6.84l-.034-.051-.009-.014-.019-.029-.018-.029-.008-.013-.01-.016s-.697-1.195-1.469-2.519c-1.538-2.637-2.166-5.707-1.788-8.736 0-.001 0-.001 0-.001.075-.595.412-1.125.919-1.444s1.13-.395 1.698-.205h.001c1.573.524 3.047 1.298 4.367 2.288v-2.735c0-4.152 1.649-8.134 4.586-11.07.475-.476 1.158-.68 1.816-.545.659.135 1.205.592 1.455 1.216l.643 1.608.643-1.608c.25-.624.796-1.081 1.455-1.216.658-.135 1.341.069 1.816.545 1.009 1.009 1.866 2.141 2.557 3.362l.068-.34c.144-.723.675-1.308 1.381-1.522s1.473-.022 1.994.5c0 0 .652.652 1.486 1.485 2.625 2.626 4.1 6.187 4.1 9.9z"/><path d="m2 14.001v-.001c1.973.658 3.765 1.765 5.236 3.236.437.437.764.764.764.764v4l-3 2s-.697-1.195-1.469-2.519c-1.317-2.258-1.855-4.886-1.531-7.48zm21-.001v-3.317c0-1.119.111-2.236.33-3.334.291-1.456.67-3.349.67-3.349s.652.652 1.485 1.485c2.251 2.251 3.515 5.303 3.515 8.486v.029l-3.5 2.5zm-14-1v-1.344c0-3.621 1.439-7.095 4-9.656s.382.955.812 2.031c.785 1.961 1.188 4.054 1.188 6.167v2.802l-3.5 2zm7 0v-2.802c0-2.113.403-4.206 1.188-6.167.43-1.076.812-2.031.812-2.031 2.561 2.561 4 6.035 4 9.656v1.344l-3.5 1.5z" fill="#5c56bc"/><path d="m29 19c0 2.917-1.159 5.715-3.222 7.778s-4.861 3.222-7.778 3.222c-.604 0-1.204 0-1.789 0-4.496 0-8.695-2.243-11.196-5.978l-.015-.022 3-6 1 1v-6h6v2h1v-2h6v2h1v-1h6z" fill="#a3a9ff"/></g></svg>
|
After Width: | Height: | Size: 1.7 KiB |
1
static/img/emoji/mutant/back_of_hand_paw.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m17.035 31.996h-1.035v.004h-.133c-3.159 0-6.189-1.255-8.423-3.489-2.371-2.371-5.979-5.979-5.979-5.979-1.952-1.952-1.952-5.12 0-7.071 1.484-1.485 3.674-1.84 5.496-1.065l-1.701-6.805c-.602-2.409.865-4.854 3.275-5.457 1.354-.338 2.721-.023 3.764.747.65-1.687 2.287-2.885 4.201-2.885 1.81 0 3.372 1.071 4.086 2.613.9-.523 1.984-.739 3.087-.532 2.164.406 3.675 2.301 3.671 4.427.291.015.584.057.877.131 2.409.603 3.875 3.048 3.272 5.457 0 0-1.49 5.956-2.68 10.71-1.352 5.404-6.207 9.194-11.778 9.194z"/><path d="m14 13v-8.504c.002-.314.058-.624.174-.916.283-.718.9-1.278 1.642-1.489.263-.075.539-.106.813-.092.279.015.556.076.816.182.288.118.554.291.78.506.232.221.422.488.554.781.146.322.218.671.221 1.025v9.507c.001.067.013.133.039.195.081.191.279.315.487.304.058-.003.115-.016.169-.038.055-.024.106-.058.15-.099.046-.044.084-.098.111-.156.029-.065.043-.135.044-.206v-5.899l.387-2.062c.254-1.356 1.561-2.25 2.917-1.996 1.062.199 1.84 1.043 2.007 2.05l-1.554 9.325c-.01.066-.009.133.007.198.048.203.223.357.429.381.058.006.117.003.173-.011.059-.014.115-.038.165-.072.053-.036.099-.083.135-.136.039-.059.065-.126.077-.196l1.123-6.734c.546-.323 1.215-.439 1.879-.273 1.339.336 2.153 1.695 1.817 3.033 0 0-1.494 5.959-2.687 10.714-1.131 4.511-5.186 7.674-9.836 7.674h-1.039v.004h-.133c-2.629 0-5.15-1.044-7.009-2.903-2.371-2.371-5.979-5.98-5.979-5.98-1.171-1.17-1.171-3.071 0-4.242s3.072-1.171 4.242 0l2.879 2.878v-1.449l-2.799-11.198c-.084-.344-.099-.702-.035-1.051.057-.316.176-.621.348-.892.167-.264.383-.495.634-.68.226-.166.48-.292.748-.374.262-.08.537-.117.81-.108.772.024 1.506.418 1.955 1.046.182.255.312.543.39.847l.949 3.794v3.812c.001.067.013.133.039.195.081.191.279.315.487.304.058-.003.115-.016.169-.038.055-.024.106-.058.15-.099.046-.044.084-.098.111-.156.029-.065.043-.135.044-.206z" fill="#a3a9ff"/></g></svg>
|
After Width: | Height: | Size: 2.1 KiB |
1
static/img/emoji/mutant/baseball.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m28.327 8.65c-.841-2.314-2.663-4.136-4.977-4.977-.507-.185-1.038-.378-1.572-.572-3.732-1.357-7.824-1.357-11.556 0-.534.194-1.065.387-1.572.572-2.314.841-4.136 2.663-4.977 4.977-.185.507-.378 1.038-.572 1.572-1.357 3.732-1.357 7.824 0 11.556.194.534.387 1.065.572 1.572.841 2.314 2.663 4.136 4.977 4.977.507.185 1.038.378 1.572.572 3.732 1.357 7.824 1.357 11.556 0 .534-.194 1.065-.387 1.572-.572 2.314-.841 4.136-2.663 4.977-4.977.185-.507.378-1.038.572-1.572 1.357-3.732 1.357-7.824 0-11.556-.194-.534-.387-1.065-.572-1.572z"/></clipPath><path d="m0 0v32h32v-32z" fill="none"/><path d="m28.327 8.65c-.841-2.314-2.663-4.136-4.977-4.977-.507-.185-1.038-.378-1.572-.572-3.732-1.357-7.824-1.357-11.556 0-.534.194-1.065.387-1.572.572-2.314.841-4.136 2.663-4.977 4.977-.185.507-.378 1.038-.572 1.572-1.357 3.732-1.357 7.824 0 11.556.194.534.387 1.065.572 1.572.841 2.314 2.663 4.136 4.977 4.977.507.185 1.038.378 1.572.572 3.732 1.357 7.824 1.357 11.556 0 .534-.194 1.065-.387 1.572-.572 2.314-.841 4.136-2.663 4.977-4.977.185-.507.378-1.038.572-1.572 1.357-3.732 1.357-7.824 0-11.556-.194-.534-.387-1.065-.572-1.572z" fill="none" stroke="#000" stroke-width="4"/><path d="m28.327 8.65c-.841-2.314-2.663-4.136-4.977-4.977-.507-.185-1.038-.378-1.572-.572-3.732-1.357-7.824-1.357-11.556 0-.534.194-1.065.387-1.572.572-2.314.841-4.136 2.663-4.977 4.977-.185.507-.378 1.038-.572 1.572-1.357 3.732-1.357 7.824 0 11.556.194.534.387 1.065.572 1.572.841 2.314 2.663 4.136 4.977 4.977.507.185 1.038.378 1.572.572 3.732 1.357 7.824 1.357 11.556 0 .534-.194 1.065-.387 1.572-.572 2.314-.841 4.136-2.663 4.977-4.977.185-.507.378-1.038.572-1.572 1.357-3.732 1.357-7.824 0-11.556-.194-.534-.387-1.065-.572-1.572z" fill="#f1f1f1"/><g clip-path="url(#a)"><path d="m.76.712c4.967-4.968 11.795-6.205 15.238-2.763 3.443 3.443 2.205 10.271-2.762 15.238-4.967 4.968-11.795 6.205-15.238 2.762-3.443-3.442-2.205-10.27 2.762-15.237z" fill="#fff"/><g fill="none" stroke="#ff5757" stroke-width="3"><ellipse cx="27.5" cy="16" rx="7.5" ry="10.778"/><ellipse cx="4.5" cy="16" rx="7.5" ry="10.778"/></g></g></svg>
|
After Width: | Height: | Size: 2.3 KiB |
1
static/img/emoji/mutant/basketball.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><clipPath id="b"><circle clip-rule="evenodd" cx="16" cy="16" r="14"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m0 16c0-8.831 7.169-16 16-16s16 7.169 16 16-7.169 16-16 16-16-7.169-16-16z"/><circle cx="16" cy="16" fill="#e86932" r="14"/><g clip-path="url(#b)"><path d="m4.378 4.378c5.02-5.019 11.229-6.96 13.858-4.331 2.63 2.629.689 8.839-4.331 13.858-5.019 5.02-11.229 6.961-13.858 4.331-2.629-2.629-.688-8.838 4.331-13.858z" fill="#ff8f44"/><g fill="none" stroke="#81310e" stroke-width="2"><path d="m16 31v-30"/><path d="m31 16h-30"/><path d="m31 24s-12-1.896-12-8 12-8 12-8"/><path d="m1 24s12-1.896 12-8-12-8-12-8"/></g></g></g></svg>
|
After Width: | Height: | Size: 965 B |
1
static/img/emoji/mutant/blep.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m19.491 4.051 2.537-1.926c1.816-1.379 4.033-2.125 6.312-2.125h.001c1.469 0 2.659 1.19 2.659 2.659v1.68c0 1.951-.272 3.893-.808 5.769l-.719 2.516c1.962 5.118.761 10.971-3.175 14.906-.432.432-.853.853-1.248 1.248-2.063 2.063-4.861 3.222-7.778 3.222-.831 0-1.713 0-2.544 0-2.917 0-5.715-1.159-7.778-3.222-.395-.395-.816-.816-1.248-1.248-3.936-3.935-5.137-9.788-3.175-14.906l-.719-2.516c-.536-1.876-.808-3.818-.808-5.769 0-.626 0-1.239 0-1.68 0-1.469 1.19-2.659 2.659-2.659h.001c2.279 0 4.496.746 6.312 2.125l2.537 1.926c.348-.034.699-.051 1.053-.051h4.876c.354 0 .705.017 1.053.051z"/><path d="m3.045 2.418c.097-.245.335-.418.614-.418h.001c1.842 0 3.635.603 5.102 1.718 2.666 2.024 6.738 5.115 6.738 5.115l-4.5 2.215z" fill="#353535"/><path d="m3.045 2.418 1.668.667c1.509.604 2.88 1.508 4.029 2.657 1.078 1.078 2.258 2.258 2.258 2.258v3.048l-6 2.952s-.698-2.442-1.269-4.441c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.085.016-.166.045-.241z" fill="#4b4b4b"/><path d="m28.955 2.418c-.097-.245-.335-.418-.614-.418 0 0 0 0-.001 0-1.842 0-3.635.603-5.102 1.718-2.666 2.024-6.738 5.115-6.738 5.115l4.5 2.215z" fill="#353535"/><path d="m28.955 2.418-1.668.667c-1.509.604-2.88 1.508-4.029 2.657-1.078 1.078-2.258 2.258-2.258 2.258v3.048l6 2.952s.698-2.442 1.269-4.441c.485-1.698.731-3.455.731-5.22 0-.626 0-1.239 0-1.68 0-.085-.016-.166-.045-.241z" fill="#4b4b4b"/><path d="m13.562 6c-3.409 0-6.525 1.926-8.05 4.975-.21.421-.426.853-.644 1.289-2.31 4.62-1.404 10.2 2.248 13.852.432.432.853.853 1.248 1.248 1.688 1.688 3.977 2.636 6.364 2.636h2.544c2.387 0 4.676-.948 6.364-2.636l1.248-1.248c3.652-3.652 4.558-9.232 2.248-13.852-.218-.436-.434-.868-.644-1.289-1.525-3.049-4.641-4.975-8.05-4.975-1.579 0-3.297 0-4.876 0z" fill="#353535"/><path d="m6.965 15.036c.293.293.767.293 1.059 0 .005-.004.007-.007.007-.007.523-.522 1.231-.815 1.969-.815s1.446.293 1.969.815c0 0 .002.003.007.007.292.293.766.293 1.059 0h.001c.14-.141.219-.332.219-.531s-.079-.389-.219-.53c-.005-.004-.007-.006-.007-.006-.803-.804-1.893-1.255-3.029-1.255s-2.226.451-3.029 1.255c0 0-.002.002-.007.006-.14.141-.219.331-.219.53s.079.39.219.531zm18.07 0c-.293.293-.767.293-1.059 0-.005-.004-.007-.007-.007-.007-.523-.522-1.231-.815-1.969-.815s-1.446.293-1.969.815c0 0-.002.003-.007.007-.292.293-.766.293-1.059 0 0 0 0 0-.001 0-.14-.141-.219-.332-.219-.531s.079-.389.219-.53c.005-.004.007-.006.007-.006.803-.804 1.893-1.255 3.029-1.255s2.226.451 3.029 1.255c0 0 .002.002.007.006.14.141.219.331.219.53s-.079.39-.219.531c-.001 0-.001 0-.001 0z" fill="#fbe844"/><path d="m13 16.829c0-.22.087-.431.243-.586.155-.156.366-.243.586-.243h4.342c.22 0 .431.087.586.243.156.155.243.366.243.586 0 .107-.053.207-.142.266-.595.397-2.858 1.905-2.858 1.905s-2.263-1.508-2.858-1.905c-.089-.059-.142-.159-.142-.266z" fill="#666"/><path d="m20 23-4-2-4 2v1c0 2.209 1.791 4 4 4 2.209 0 4-1.791 4-4 0-.588 0-1 0-1z" fill="#666"/><path d="m9 21s.082.165.2.399c.49.981 1.493 1.601 2.589 1.601h.334c.572 0 1.131-.169 1.606-.486.888-.592 2.271-1.514 2.271-1.514s1.383.922 2.271 1.514c.475.317 1.034.486 1.606.486h.334c1.096 0 2.099-.62 2.589-1.601.118-.234.2-.399.2-.399" fill="none" stroke="#808080" stroke-width="1.5"/></g></svg>
|
After Width: | Height: | Size: 3.4 KiB |
1
static/img/emoji/mutant/bow_b3.svg
Normal file
After Width: | Height: | Size: 6.6 KiB |
1
static/img/emoji/mutant/cat_crying.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m27 14s.698-2.442 1.269-4.441c.485-1.698.731-3.455.731-5.22 0-.626 0-1.239 0-1.68 0-.364-.295-.659-.659-.659 0 0 0 0-.001 0-1.842 0-3.635.603-5.102 1.718-2.666 2.024-6.738 5.115-6.738 5.115z"/></clipPath><clipPath id="c"><path clip-rule="evenodd" d="m5 14s-.698-2.442-1.269-4.441c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.364.295-.659.659-.659h.001c1.842 0 3.635.603 5.102 1.718 2.666 2.024 6.738 5.115 6.738 5.115z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m24.251 26.749-.615.615c-1.688 1.688-3.977 2.636-6.364 2.636-.831 0-1.713 0-2.544 0-2.387 0-4.676-.948-6.364-2.636-.395-.395-.816-.816-1.248-1.248-3.527-3.527-4.492-8.851-2.475-13.372l-.91-3.185c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.364.295-.659.659-.659h.001c1.842 0 3.635.603 5.102 1.718l3.196 2.426c.524-.095 1.06-.144 1.604-.144h4.876c.544 0 1.08.049 1.604.144l3.196-2.426c1.467-1.115 3.26-1.718 5.102-1.718h.001c.364 0 .659.295.659.659v1.68c0 1.765-.246 3.522-.731 5.22l-.91 3.185c1.07 2.398 1.301 5.023.755 7.485l1.328 2.655c.632 1.264.384 2.79-.615 3.789 0 0 0 0-.001.001-.617.617-1.453.963-2.326.963-.836 0-1.64-.318-2.249-.888z" fill="none" stroke="#000" stroke-width="4"/><path d="m27 14s.698-2.442 1.269-4.441c.485-1.698.731-3.455.731-5.22 0-.626 0-1.239 0-1.68 0-.364-.295-.659-.659-.659 0 0 0 0-.001 0-1.842 0-3.635.603-5.102 1.718-2.666 2.024-6.738 5.115-6.738 5.115z" fill="#353535"/><g clip-path="url(#b)"><path d="m21 8s1.18-1.18 2.258-2.258c1.149-1.149 2.52-2.053 4.029-2.657 1.317-.527 2.713-1.085 2.713-1.085v12h-9z" fill="#4b4b4b"/></g><path d="m5 14s-.698-2.442-1.269-4.441c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.364.295-.659.659-.659h.001c1.842 0 3.635.603 5.102 1.718 2.666 2.024 6.738 5.115 6.738 5.115z" fill="#353535"/><g clip-path="url(#c)"><path d="m11 8s-1.18-1.18-2.258-2.258c-1.149-1.149-2.52-2.053-4.029-2.657-1.317-.527-2.713-1.085-2.713-1.085v12h9z" fill="#4b4b4b"/></g><path d="m13.562 6c-3.409 0-6.525 1.926-8.05 4.975-.21.421-.426.853-.644 1.289-2.31 4.62-1.404 10.2 2.248 13.852.432.432.853.853 1.248 1.248 1.688 1.688 3.977 2.636 6.364 2.636h2.544c2.387 0 4.676-.948 6.364-2.636l1.248-1.248c3.652-3.652 4.558-9.232 2.248-13.852-.218-.436-.434-.868-.644-1.289-1.525-3.049-4.641-4.975-8.05-4.975-1.579 0-3.297 0-4.876 0z" fill="#353535"/><path d="m10.865 11.119c1.255.532 2.135 1.775 2.135 3.223v1.16c0 .928-.369 1.817-1.025 2.473s-1.545 1.025-2.473 1.025h-.002c-1.933 0-3.5-1.567-3.5-3.5 0-.384 0-.775 0-1.16 0-.241.025-.479.073-.712z" fill="#fbe844"/><path d="m9 12.841c0-.264.105-.519.293-.706.187-.187.441-.293.706-.293h.002c.265 0 .519.106.706.293.188.187.293.442.293.706v4.16c0 .265-.105.519-.293.706-.187.188-.441.293-.706.293-.001 0-.001 0-.002 0-.265 0-.519-.105-.706-.293-.188-.187-.293-.441-.293-.706 0-1.146 0-3.014 0-4.16z"/><path d="m21.191 11.095 4.691 2.346c.078.291.118.593.118.899v1.16c0 1.933-1.567 3.5-3.5 3.5h-.002c-.928 0-1.817-.369-2.473-1.025s-1.025-1.545-1.025-2.473c0-.384 0-.775 0-1.16 0-1.47.907-2.728 2.191-3.247z" fill="#fbe844"/><path d="m23 12.841c0-.264-.105-.519-.293-.706-.187-.187-.441-.293-.706-.293-.001 0-.001 0-.002 0-.265 0-.519.106-.706.293-.188.187-.293.442-.293.706v4.16c0 .265.105.519.293.706.187.188.441.293.706.293h.002c.265 0 .519-.105.706-.293.188-.187.293-.441.293-.706 0-1.146 0-3.014 0-4.16z"/><path d="m13 19.829c0-.22.087-.431.243-.586.155-.156.366-.243.586-.243h4.342c.22 0 .431.087.586.243.156.155.243.366.243.586 0 .107-.053.207-.142.266-.595.397-2.858 1.905-2.858 1.905s-2.263-1.508-2.858-1.905c-.089-.059-.142-.159-.142-.266z" fill="#666"/><path d="m12 27 4-3 4 3" fill="none" stroke="#808080" stroke-linejoin="miter" stroke-width="1.5"/><path d="m26.5 17s-1.757 3.514-2.942 5.884c-.632 1.264-.384 2.79.615 3.789 0 0 0 0 .001.001.617.617 1.453.963 2.326.963s1.709-.346 2.326-.963c.001-.001.001-.001.001-.001.999-.999 1.247-2.525.615-3.789-1.185-2.37-2.942-5.884-2.942-5.884z" fill="#00bafe"/></g></svg>
|
After Width: | Height: | Size: 4.2 KiB |
1
static/img/emoji/mutant/cat_devious.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m27 14s.698-2.442 1.269-4.441c.485-1.698.731-3.455.731-5.22 0-.626 0-1.239 0-1.68 0-.364-.295-.659-.659-.659 0 0 0 0-.001 0-1.842 0-3.635.603-5.102 1.718-2.666 2.024-6.738 5.115-6.738 5.115z"/></clipPath><clipPath id="c"><path clip-rule="evenodd" d="m5 14s-.698-2.442-1.269-4.441c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.364.295-.659.659-.659h.001c1.842 0 3.635.603 5.102 1.718 2.666 2.024 6.738 5.115 6.738 5.115z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m19.491 4.051 2.537-1.926c1.816-1.379 4.033-2.125 6.312-2.125h.001c1.469 0 2.659 1.19 2.659 2.659v1.68c0 1.951-.272 3.893-.808 5.769l-.719 2.516c1.962 5.118.761 10.971-3.175 14.906-.432.432-.853.853-1.248 1.248-2.063 2.063-4.861 3.222-7.778 3.222-.831 0-1.713 0-2.544 0-2.917 0-5.715-1.159-7.778-3.222-.395-.395-.816-.816-1.248-1.248-3.936-3.935-5.137-9.788-3.175-14.906l-.719-2.516c-.536-1.876-.808-3.818-.808-5.769 0-.626 0-1.239 0-1.68 0-1.469 1.19-2.659 2.659-2.659h.001c2.279 0 4.496.746 6.312 2.125l2.537 1.926c.348-.034.699-.051 1.053-.051h4.876c.354 0 .705.017 1.053.051z"/><path d="m27 14s.698-2.442 1.269-4.441c.485-1.698.731-3.455.731-5.22 0-.626 0-1.239 0-1.68 0-.364-.295-.659-.659-.659 0 0 0 0-.001 0-1.842 0-3.635.603-5.102 1.718-2.666 2.024-6.738 5.115-6.738 5.115z" fill="#353535"/><g clip-path="url(#b)"><path d="m21 8s1.18-1.18 2.258-2.258c1.149-1.149 2.52-2.053 4.029-2.657 1.317-.527 2.713-1.085 2.713-1.085v12h-9z" fill="#4b4b4b"/></g><path d="m5 14s-.698-2.442-1.269-4.441c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.364.295-.659.659-.659h.001c1.842 0 3.635.603 5.102 1.718 2.666 2.024 6.738 5.115 6.738 5.115z" fill="#353535"/><g clip-path="url(#c)"><path d="m11 8s-1.18-1.18-2.258-2.258c-1.149-1.149-2.52-2.053-4.029-2.657-1.317-.527-2.713-1.085-2.713-1.085v12h9z" fill="#4b4b4b"/></g><path d="m13.562 6c-3.409 0-6.525 1.926-8.05 4.975-.21.421-.426.853-.644 1.289-2.31 4.62-1.404 10.2 2.248 13.852.432.432.853.853 1.248 1.248 1.688 1.688 3.977 2.636 6.364 2.636h2.544c2.387 0 4.676-.948 6.364-2.636l1.248-1.248c3.652-3.652 4.558-9.232 2.248-13.852-.218-.436-.434-.868-.644-1.289-1.525-3.049-4.641-4.975-8.05-4.975-1.579 0-3.297 0-4.876 0z" fill="#353535"/><path d="m23 13 1.518-1.518c.162.114.315.243.457.385.656.656 1.025 1.546 1.025 2.473v1.16c0 1.933-1.567 3.5-3.5 3.5h-.002c-.928 0-1.817-.369-2.473-1.025-.348-.347-.615-.761-.789-1.211l1.764-1.764.963-.42z" fill="#fbe844"/><path d="m23 17.001c0 .123-.023.245-.067.36-.038.099-.092.191-.159.273-.063.076-.137.143-.219.198-.095.063-.2.11-.31.138-.206.052-.426.036-.623-.044-.115-.047-.221-.115-.312-.201-.095-.091-.171-.2-.224-.319-.057-.128-.086-.266-.086-.405v-2.001l2-2z"/><path d="m9 13-1.518-1.518c-.162.114-.315.243-.457.385-.656.656-1.025 1.546-1.025 2.473v1.16c0 1.933 1.567 3.5 3.5 3.5h.002c.928 0 1.817-.369 2.473-1.025.348-.347.615-.761.789-1.211l-1.764-1.764-.963-.42z" fill="#fbe844"/><path d="m9 17.001c0 .123.023.245.067.36.038.099.092.191.159.273.063.076.137.143.219.198.095.063.2.11.31.138.206.052.426.036.623-.044.115-.047.221-.115.312-.201.095-.091.171-.2.224-.319.057-.128.086-.266.086-.405v-2.001l-2-2z"/><path d="m13 19.829c0-.22.087-.431.243-.586.155-.156.366-.243.586-.243h4.342c.22 0 .431.087.586.243.156.155.243.366.243.586 0 .107-.053.207-.142.266-.595.397-2.858 1.905-2.858 1.905s-2.263-1.508-2.858-1.905c-.089-.059-.142-.159-.142-.266z" fill="#666"/><path d="m10 24s.385.385.879.879c.562.562 1.325.878 2.121.878s1.559-.316 2.121-.878c.494-.494.879-.879.879-.879s.385.385.879.879c.562.562 1.325.878 2.121.878s1.559-.316 2.121-.878c.494-.494.879-.879.879-.879" fill="none" stroke="#808080" stroke-width="1.5"/></g></svg>
|
After Width: | Height: | Size: 3.9 KiB |
1
static/img/emoji/mutant/cat_grin.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m27 14s.698-2.442 1.269-4.441c.485-1.698.731-3.455.731-5.22 0-.626 0-1.239 0-1.68 0-.364-.295-.659-.659-.659 0 0 0 0-.001 0-1.842 0-3.635.603-5.102 1.718-2.666 2.024-6.738 5.115-6.738 5.115z"/></clipPath><clipPath id="c"><path clip-rule="evenodd" d="m5 14s-.698-2.442-1.269-4.441c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.364.295-.659.659-.659h.001c1.842 0 3.635.603 5.102 1.718 2.666 2.024 6.738 5.115 6.738 5.115z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m19.491 4.051 2.537-1.926c1.816-1.379 4.033-2.125 6.312-2.125h.001c1.469 0 2.659 1.19 2.659 2.659v1.68c0 1.951-.272 3.893-.808 5.769l-.719 2.516c1.962 5.118.761 10.971-3.175 14.906-.432.432-.853.853-1.248 1.248-2.063 2.063-4.861 3.222-7.778 3.222-.831 0-1.713 0-2.544 0-2.917 0-5.715-1.159-7.778-3.222-.395-.395-.816-.816-1.248-1.248-3.936-3.935-5.137-9.788-3.175-14.906l-.719-2.516c-.536-1.876-.808-3.818-.808-5.769 0-.626 0-1.239 0-1.68 0-1.469 1.19-2.659 2.659-2.659h.001c2.279 0 4.496.746 6.312 2.125l2.537 1.926c.348-.034.699-.051 1.053-.051h4.876c.354 0 .705.017 1.053.051z"/><path d="m27 14s.698-2.442 1.269-4.441c.485-1.698.731-3.455.731-5.22 0-.626 0-1.239 0-1.68 0-.364-.295-.659-.659-.659 0 0 0 0-.001 0-1.842 0-3.635.603-5.102 1.718-2.666 2.024-6.738 5.115-6.738 5.115z" fill="#353535"/><g clip-path="url(#b)"><path d="m21 8s1.18-1.18 2.258-2.258c1.149-1.149 2.52-2.053 4.029-2.657 1.317-.527 2.713-1.085 2.713-1.085v12h-9z" fill="#4b4b4b"/></g><path d="m5 14s-.698-2.442-1.269-4.441c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.364.295-.659.659-.659h.001c1.842 0 3.635.603 5.102 1.718 2.666 2.024 6.738 5.115 6.738 5.115z" fill="#353535"/><g clip-path="url(#c)"><path d="m11 8s-1.18-1.18-2.258-2.258c-1.149-1.149-2.52-2.053-4.029-2.657-1.317-.527-2.713-1.085-2.713-1.085v12h9z" fill="#4b4b4b"/></g><path d="m13.562 6c-3.409 0-6.525 1.926-8.05 4.975-.21.421-.426.853-.644 1.289-2.31 4.62-1.404 10.2 2.248 13.852.432.432.853.853 1.248 1.248 1.688 1.688 3.977 2.636 6.364 2.636h2.544c2.387 0 4.676-.948 6.364-2.636l1.248-1.248c3.652-3.652 4.558-9.232 2.248-13.852-.218-.436-.434-.868-.644-1.289-1.525-3.049-4.641-4.975-8.05-4.975-1.579 0-3.297 0-4.876 0z" fill="#353535"/><path d="m6.965 17.036c.293.293.767.293 1.059 0 .005-.004.007-.007.007-.007.523-.522 1.231-.815 1.969-.815s1.446.293 1.969.815c0 0 .002.003.007.007.292.293.766.293 1.059 0h.001c.14-.141.219-.332.219-.531s-.079-.389-.219-.53c-.005-.004-.007-.006-.007-.006-.803-.804-1.893-1.255-3.029-1.255s-2.226.451-3.029 1.255c0 0-.002.002-.007.006-.14.141-.219.331-.219.53s.079.39.219.531zm18.07 0c-.293.293-.767.293-1.059 0-.005-.004-.007-.007-.007-.007-.523-.522-1.231-.815-1.969-.815s-1.446.293-1.969.815c0 0-.002.003-.007.007-.292.293-.766.293-1.059 0 0 0 0 0-.001 0-.14-.141-.219-.332-.219-.531s.079-.389.219-.53c.005-.004.007-.006.007-.006.803-.804 1.893-1.255 3.029-1.255s2.226.451 3.029 1.255c0 0 .002.002.007.006.14.141.219.331.219.53s-.079.39-.219.531c-.001 0-.001 0-.001 0z" fill="#fbe844"/><path d="m13 19.829c0-.22.087-.431.243-.586.155-.156.366-.243.586-.243h4.342c.22 0 .431.087.586.243.156.155.243.366.243.586 0 .107-.053.207-.142.266-.595.397-2.858 1.905-2.858 1.905s-2.263-1.508-2.858-1.905c-.089-.059-.142-.159-.142-.266z" fill="#666"/><path d="m10 24s.385.385.879.879c.562.562 1.325.878 2.121.878s1.559-.316 2.121-.878c.494-.494.879-.879.879-.879s.385.385.879.879c.562.562 1.325.878 2.121.878s1.559-.316 2.121-.878c.494-.494.879-.879.879-.879" fill="none" stroke="#808080" stroke-width="1.5"/></g></svg>
|
After Width: | Height: | Size: 3.7 KiB |
1
static/img/emoji/mutant/cat_heart_eyes.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m27 14s.698-2.442 1.269-4.441c.485-1.698.731-3.455.731-5.22 0-.626 0-1.239 0-1.68 0-.364-.295-.659-.659-.659 0 0 0 0-.001 0-1.842 0-3.635.603-5.102 1.718-2.666 2.024-6.738 5.115-6.738 5.115z"/></clipPath><clipPath id="c"><path clip-rule="evenodd" d="m5 14s-.698-2.442-1.269-4.441c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.364.295-.659.659-.659h.001c1.842 0 3.635.603 5.102 1.718 2.666 2.024 6.738 5.115 6.738 5.115z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m19.491 4.051 2.537-1.926c1.816-1.379 4.033-2.125 6.312-2.125h.001c1.469 0 2.659 1.19 2.659 2.659v1.68c0 1.951-.272 3.893-.808 5.769l-.295 1.031c.593.815.918 1.802.92 2.823.002.753-.172 1.489-.5 2.151.45 4.134-.957 8.356-4.019 11.417-.432.432-.853.853-1.248 1.248-2.063 2.063-4.861 3.222-7.778 3.222-.831 0-1.713 0-2.544 0-2.917 0-5.715-1.159-7.778-3.222-.395-.395-.816-.816-1.248-1.248-3.048-3.047-4.456-7.245-4.025-11.361-.803-1.599-.661-3.551.427-5.024l-.296-1.037c-.536-1.876-.808-3.818-.808-5.769 0-.626 0-1.239 0-1.68 0-1.469 1.19-2.659 2.659-2.659h.001c2.279 0 4.496.746 6.312 2.125l2.537 1.926c.348-.034.699-.051 1.053-.051h4.876c.354 0 .705.017 1.053.051z"/><path d="m27 14s.698-2.442 1.269-4.441c.485-1.698.731-3.455.731-5.22 0-.626 0-1.239 0-1.68 0-.364-.295-.659-.659-.659 0 0 0 0-.001 0-1.842 0-3.635.603-5.102 1.718-2.666 2.024-6.738 5.115-6.738 5.115z" fill="#353535"/><g clip-path="url(#b)"><path d="m21 8s1.18-1.18 2.258-2.258c1.149-1.149 2.52-2.053 4.029-2.657 1.317-.527 2.713-1.085 2.713-1.085v12h-9z" fill="#4b4b4b"/></g><path d="m5 14s-.698-2.442-1.269-4.441c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.364.295-.659.659-.659h.001c1.842 0 3.635.603 5.102 1.718 2.666 2.024 6.738 5.115 6.738 5.115z" fill="#353535"/><g clip-path="url(#c)"><path d="m11 8s-1.18-1.18-2.258-2.258c-1.149-1.149-2.52-2.053-4.029-2.657-1.317-.527-2.713-1.085-2.713-1.085v12h9z" fill="#4b4b4b"/></g><path d="m13.562 6c-3.409 0-6.525 1.926-8.05 4.975-.21.421-.426.853-.644 1.289-2.31 4.62-1.404 10.2 2.248 13.852.432.432.853.853 1.248 1.248 1.688 1.688 3.977 2.636 6.364 2.636h2.544c2.387 0 4.676-.948 6.364-2.636l1.248-1.248c3.652-3.652 4.558-9.232 2.248-13.852-.218-.436-.434-.868-.644-1.289-1.525-3.049-4.641-4.975-8.05-4.975-1.579 0-3.297 0-4.876 0z" fill="#353535"/><path d="m9 23s.077.231.189.566c.484 1.453 1.845 2.434 3.377 2.434h.234c1.348 0 2.581-.762 3.184-1.968.01-.021.016-.032.016-.032s.006.011.016.032c.603 1.206 1.836 1.968 3.184 1.968h.234c1.532 0 2.893-.981 3.377-2.434.112-.335.189-.566.189-.566" fill="none" stroke="#808080" stroke-width="1.5"/><path d="m22.964 21s-2.919-2.934-4.978-5.003c-1.097-1.104-1.095-2.888.006-3.989 0 0 .001-.001.002-.002.531-.531 1.252-.829 2.004-.828s1.472.302 2.002.835c.533.537.964.971.964.971s.476-.468 1.051-1.033c1.101-1.082 2.866-1.078 3.962.008 0 0 .001.001.001.001.535.531.837 1.253.839 2.007s-.297 1.477-.83 2.01c-2.079 2.08-5.023 5.023-5.023 5.023z" fill="#d92020"/><path d="m8.964 21s-2.919-2.934-4.978-5.003c-1.097-1.104-1.095-2.888.006-3.989 0 0 .001-.001.002-.002.531-.531 1.252-.829 2.004-.828s1.472.302 2.002.835c.533.537.964.971.964.971s.476-.468 1.051-1.033c1.101-1.082 2.866-1.078 3.962.008 0 0 .001.001.001.001.535.531.837 1.253.839 2.007s-.297 1.477-.83 2.01c-2.079 2.08-5.023 5.023-5.023 5.023z" fill="#d92020"/><path d="m13 19.829c0-.22.087-.431.243-.586.155-.156.366-.243.586-.243h4.342c.22 0 .431.087.586.243.156.155.243.366.243.586 0 .107-.053.207-.142.266-.595.397-2.858 1.905-2.858 1.905s-2.263-1.508-2.858-1.905c-.089-.059-.142-.159-.142-.266z" fill="#666"/></g></svg>
|
After Width: | Height: | Size: 3.8 KiB |
1
static/img/emoji/mutant/cat_joy.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m27 14s.698-2.442 1.269-4.441c.485-1.698.731-3.455.731-5.22 0-.626 0-1.239 0-1.68 0-.364-.295-.659-.659-.659 0 0 0 0-.001 0-1.842 0-3.635.603-5.102 1.718-2.666 2.024-6.738 5.115-6.738 5.115z"/></clipPath><clipPath id="c"><path clip-rule="evenodd" d="m5 14s-.698-2.442-1.269-4.441c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.364.295-.659.659-.659h.001c1.842 0 3.635.603 5.102 1.718 2.666 2.024 6.738 5.115 6.738 5.115z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m19.491 4.051 2.537-1.926c1.816-1.379 4.033-2.125 6.312-2.125h.001c1.469 0 2.659 1.19 2.659 2.659v1.68c0 1.951-.272 3.893-.808 5.769l-.719 2.517c.954 2.488 1.16 5.149.667 7.68l.395.503c1.486 1.891 1.415 4.572-.168 6.382-.01.011-.02.022-.03.033-1.329 1.52-3.389 2.05-5.222 1.49l-.065.065c-2.063 2.063-4.861 3.222-7.778 3.222-.831 0-1.713 0-2.544 0-2.917 0-5.715-1.159-7.778-3.222l-.065-.065c-1.833.56-3.893.03-5.222-1.49-.01-.011-.02-.022-.03-.033-1.583-1.81-1.654-4.491-.168-6.382l.395-.503c-.493-2.53-.287-5.192.667-7.68l-.719-2.517c-.536-1.876-.808-3.818-.808-5.769 0-.626 0-1.239 0-1.68 0-1.469 1.19-2.659 2.659-2.659h.001c2.279 0 4.496.746 6.312 2.125l2.537 1.926c.348-.034.699-.051 1.053-.051h4.876c.354 0 .705.017 1.053.051z"/><path d="m27 14s.698-2.442 1.269-4.441c.485-1.698.731-3.455.731-5.22 0-.626 0-1.239 0-1.68 0-.364-.295-.659-.659-.659 0 0 0 0-.001 0-1.842 0-3.635.603-5.102 1.718-2.666 2.024-6.738 5.115-6.738 5.115z" fill="#353535"/><g clip-path="url(#b)"><path d="m21 8s1.18-1.18 2.258-2.258c1.149-1.149 2.52-2.053 4.029-2.657 1.317-.527 2.713-1.085 2.713-1.085v12h-9z" fill="#4b4b4b"/></g><path d="m5 14s-.698-2.442-1.269-4.441c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.364.295-.659.659-.659h.001c1.842 0 3.635.603 5.102 1.718 2.666 2.024 6.738 5.115 6.738 5.115z" fill="#353535"/><g clip-path="url(#c)"><path d="m11 8s-1.18-1.18-2.258-2.258c-1.149-1.149-2.52-2.053-4.029-2.657-1.317-.527-2.713-1.085-2.713-1.085v12h9z" fill="#4b4b4b"/></g><path d="m13.562 6c-3.409 0-6.525 1.926-8.05 4.975-.21.421-.426.853-.644 1.289-2.31 4.62-1.404 10.2 2.248 13.852.432.432.853.853 1.248 1.248 1.688 1.688 3.977 2.636 6.364 2.636h2.544c2.387 0 4.676-.948 6.364-2.636l1.248-1.248c3.652-3.652 4.558-9.232 2.248-13.852-.218-.436-.434-.868-.644-1.289-1.525-3.049-4.641-4.975-8.05-4.975-1.579 0-3.297 0-4.876 0z" fill="#353535"/><path d="m10.453 14.662-2.441-2.093c-.314-.269-.351-.743-.081-1.057.269-.314.743-.351 1.057-.081l4.559 3.907-4.841 1.383c-.398.114-.813-.117-.927-.515s.117-.813.515-.927zm11.094 0 2.159.617c.398.114.629.529.515.927s-.529.629-.927.515l-4.841-1.383 4.559-3.907c.314-.27.788-.233 1.057.081.27.314.233.788-.081 1.057z" fill="#fbe844"/><path d="m11.967 26.736c-.808-.561-1.502-1.294-2.025-2.166-.196-.327-.377-.629-.528-.879-.084-.141-.086-.317-.005-.46s.232-.231.396-.231h1.681c.987 0 1.952-.292 2.774-.84.821-.547 1.74-1.16 1.74-1.16s.919.613 1.74 1.16c.822.548 1.787.84 2.774.84h1.681c.164 0 .315.088.396.231s.079.319-.005.46c-.151.25-.332.552-.528.879-.523.872-1.217 1.605-2.025 2.166-1.026-1.084-7.04-1.084-8.066 0z" fill="#808080"/><path d="m11.967 26.736c1.026-1.084 2.472-1.736 4.032-1.736h.002c1.56 0 3.006.652 4.032 1.736-1.166.81-2.567 1.264-4.033 1.264-1.466 0-2.867-.454-4.033-1.264z" fill="#b3b3b3"/><path d="m25 17s2.336 2.973 3.963 5.044c.891 1.134.849 2.743-.101 3.829-.01.011-.02.022-.03.033-1.033 1.181-2.802 1.366-4.058.425-.06-.046-.121-.091-.18-.136-.966-.724-1.404-1.956-1.111-3.127.592-2.368 1.517-6.068 1.517-6.068z" fill="#00bafe"/><path d="m7 17s-2.336 2.973-3.963 5.044c-.891 1.134-.849 2.743.101 3.829l.03.033c1.033 1.181 2.802 1.366 4.058.425.06-.046.121-.091.18-.136.966-.724 1.404-1.956 1.111-3.127-.592-2.368-1.517-6.068-1.517-6.068z" fill="#00bafe"/><path d="m13 17.829c0-.22.087-.431.243-.586.155-.156.366-.243.586-.243h4.342c.22 0 .431.087.586.243.156.155.243.366.243.586 0 .107-.053.207-.142.266-.595.397-2.858 1.905-2.858 1.905s-2.263-1.508-2.858-1.905c-.089-.059-.142-.159-.142-.266z" fill="#666"/></g></svg>
|
After Width: | Height: | Size: 4.2 KiB |
1
static/img/emoji/mutant/cat_kiss.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m27 14s.698-2.442 1.269-4.441c.485-1.698.731-3.455.731-5.22 0-.626 0-1.239 0-1.68 0-.364-.295-.659-.659-.659 0 0 0 0-.001 0-1.842 0-3.635.603-5.102 1.718-2.666 2.024-6.738 5.115-6.738 5.115z"/></clipPath><clipPath id="c"><path clip-rule="evenodd" d="m5 14s-.698-2.442-1.269-4.441c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.364.295-.659.659-.659h.001c1.842 0 3.635.603 5.102 1.718 2.666 2.024 6.738 5.115 6.738 5.115z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m19.491 4.051 2.537-1.926c1.816-1.379 4.033-2.125 6.312-2.125h.001c1.469 0 2.659 1.19 2.659 2.659v1.68c0 1.951-.272 3.893-.808 5.769l-.719 2.516c1.962 5.118.761 10.971-3.175 14.906-.432.432-.853.853-1.248 1.248-2.063 2.063-4.861 3.222-7.778 3.222-.831 0-1.713 0-2.544 0-2.917 0-5.715-1.159-7.778-3.222-.395-.395-.816-.816-1.248-1.248-3.936-3.935-5.137-9.788-3.175-14.906l-.719-2.516c-.536-1.876-.808-3.818-.808-5.769 0-.626 0-1.239 0-1.68 0-1.469 1.19-2.659 2.659-2.659h.001c2.279 0 4.496.746 6.312 2.125l2.537 1.926c.348-.034.699-.051 1.053-.051h4.876c.354 0 .705.017 1.053.051z"/><path d="m27 14s.698-2.442 1.269-4.441c.485-1.698.731-3.455.731-5.22 0-.626 0-1.239 0-1.68 0-.364-.295-.659-.659-.659 0 0 0 0-.001 0-1.842 0-3.635.603-5.102 1.718-2.666 2.024-6.738 5.115-6.738 5.115z" fill="#353535"/><g clip-path="url(#b)"><path d="m21 8s1.18-1.18 2.258-2.258c1.149-1.149 2.52-2.053 4.029-2.657 1.317-.527 2.713-1.085 2.713-1.085v12h-9z" fill="#4b4b4b"/></g><path d="m5 14s-.698-2.442-1.269-4.441c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.364.295-.659.659-.659h.001c1.842 0 3.635.603 5.102 1.718 2.666 2.024 6.738 5.115 6.738 5.115z" fill="#353535"/><g clip-path="url(#c)"><path d="m11 8s-1.18-1.18-2.258-2.258c-1.149-1.149-2.52-2.053-4.029-2.657-1.317-.527-2.713-1.085-2.713-1.085v12h9z" fill="#4b4b4b"/></g><path d="m13.562 6c-3.409 0-6.525 1.926-8.05 4.975-.21.421-.426.853-.644 1.289-2.31 4.62-1.404 10.2 2.248 13.852.432.432.853.853 1.248 1.248 1.688 1.688 3.977 2.636 6.364 2.636h2.544c2.387 0 4.676-.948 6.364-2.636l1.248-1.248c3.652-3.652 4.558-9.232 2.248-13.852-.218-.436-.434-.868-.644-1.289-1.525-3.049-4.641-4.975-8.05-4.975-1.579 0-3.297 0-4.876 0z" fill="#353535"/><path d="m19.165 14.171 4 2c.37.185.821.035 1.006-.336.185-.37.035-.821-.336-1.006l-4-2c-.37-.185-.821-.035-1.006.336-.185.37-.035.821.336 1.006z" fill="#fbe844"/><path d="m12.165 12.829-4 2c-.371.185-.521.636-.336 1.006.185.371.636.521 1.006.336l4-2c.371-.185.521-.636.336-1.006-.185-.371-.636-.521-1.006-.336z" fill="#fbe844"/><path d="m18.033 22.906-2.715-.678c-.401-.101-.646-.508-.546-.91.101-.401.508-.646.91-.546l4 1c.262.066.469.267.541.528.072.26-.002.539-.193.73l-1.469 1.47 1.469 1.47c.191.191.265.47.193.73-.072.261-.279.462-.541.528l-4 1c-.402.1-.809-.145-.91-.546-.1-.402.145-.809.546-.91l2.715-.678-1.063-1.064c-.287-.302-.287-.758 0-1.06z" fill="#808080"/><path d="m13 17.829c0-.22.087-.431.243-.586.155-.156.366-.243.586-.243h4.352c.217 0 .426.086.579.24.154.153.24.362.24.579v.001c0 .112-.056.218-.15.28-.607.405-2.85 1.9-2.85 1.9s-2.263-1.508-2.858-1.905c-.089-.059-.142-.159-.142-.266z" fill="#666"/></g></svg>
|
After Width: | Height: | Size: 3.4 KiB |
1
static/img/emoji/mutant/cat_pouting.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m27 14s.698-2.442 1.269-4.441c.485-1.698.731-3.455.731-5.22 0-.626 0-1.239 0-1.68 0-.364-.295-.659-.659-.659 0 0 0 0-.001 0-1.842 0-3.635.603-5.102 1.718-2.666 2.024-6.738 5.115-6.738 5.115z"/></clipPath><clipPath id="c"><path clip-rule="evenodd" d="m5 14s-.698-2.442-1.269-4.441c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.364.295-.659.659-.659h.001c1.842 0 3.635.603 5.102 1.718 2.666 2.024 6.738 5.115 6.738 5.115z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m19.491 4.051 2.537-1.926c1.816-1.379 4.033-2.125 6.312-2.125h.001c1.469 0 2.659 1.19 2.659 2.659v1.68c0 1.951-.272 3.893-.808 5.769l-.719 2.516c1.962 5.118.761 10.971-3.175 14.906-.432.432-.853.853-1.248 1.248-2.063 2.063-4.861 3.222-7.778 3.222-.831 0-1.713 0-2.544 0-2.917 0-5.715-1.159-7.778-3.222-.395-.395-.816-.816-1.248-1.248-3.936-3.935-5.137-9.788-3.175-14.906l-.719-2.516c-.536-1.876-.808-3.818-.808-5.769 0-.626 0-1.239 0-1.68 0-1.469 1.19-2.659 2.659-2.659h.001c2.279 0 4.496.746 6.312 2.125l2.537 1.926c.348-.034.699-.051 1.053-.051h4.876c.354 0 .705.017 1.053.051z"/><path d="m27 14s.698-2.442 1.269-4.441c.485-1.698.731-3.455.731-5.22 0-.626 0-1.239 0-1.68 0-.364-.295-.659-.659-.659 0 0 0 0-.001 0-1.842 0-3.635.603-5.102 1.718-2.666 2.024-6.738 5.115-6.738 5.115z" fill="#353535"/><g clip-path="url(#b)"><path d="m21 8s1.18-1.18 2.258-2.258c1.149-1.149 2.52-2.053 4.029-2.657 1.317-.527 2.713-1.085 2.713-1.085v12h-9z" fill="#4b4b4b"/></g><path d="m5 14s-.698-2.442-1.269-4.441c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.364.295-.659.659-.659h.001c1.842 0 3.635.603 5.102 1.718 2.666 2.024 6.738 5.115 6.738 5.115z" fill="#353535"/><g clip-path="url(#c)"><path d="m11 8s-1.18-1.18-2.258-2.258c-1.149-1.149-2.52-2.053-4.029-2.657-1.317-.527-2.713-1.085-2.713-1.085v12h9z" fill="#4b4b4b"/></g><path d="m13.562 6c-3.409 0-6.525 1.926-8.05 4.975-.21.421-.426.853-.644 1.289-2.31 4.62-1.404 10.2 2.248 13.852.432.432.853.853 1.248 1.248 1.688 1.688 3.977 2.636 6.364 2.636h2.544c2.387 0 4.676-.948 6.364-2.636l1.248-1.248c3.652-3.652 4.558-9.232 2.248-13.852-.218-.436-.434-.868-.644-1.289-1.525-3.049-4.641-4.975-8.05-4.975-1.579 0-3.297 0-4.876 0z" fill="#353535"/><path d="m23 13 1.518-1.518c.162.114.315.243.457.385.656.656 1.025 1.546 1.025 2.473v1.16c0 1.933-1.567 3.5-3.5 3.5h-.002c-.928 0-1.817-.369-2.473-1.025-.348-.347-.615-.761-.789-1.211l1.764-1.764.963-.42z" fill="#fbe844"/><path d="m23 17.001c0 .123-.023.245-.067.36-.038.099-.092.191-.159.273-.063.076-.137.143-.219.198-.095.063-.2.11-.31.138-.206.052-.426.036-.623-.044-.115-.047-.221-.115-.312-.201-.095-.091-.171-.2-.224-.319-.057-.128-.086-.266-.086-.405v-2.001l2-2z"/><path d="m9 13-1.518-1.518c-.162.114-.315.243-.457.385-.656.656-1.025 1.546-1.025 2.473v1.16c0 1.933 1.567 3.5 3.5 3.5h.002c.928 0 1.817-.369 2.473-1.025.348-.347.615-.761.789-1.211l-1.764-1.764-.963-.42z" fill="#fbe844"/><path d="m9 17.001c0 .123.023.245.067.36.038.099.092.191.159.273.063.076.137.143.219.198.095.063.2.11.31.138.206.052.426.036.623-.044.115-.047.221-.115.312-.201.095-.091.171-.2.224-.319.057-.128.086-.266.086-.405v-2.001l-2-2z"/><path d="m13 19.829c0-.22.087-.431.243-.586.155-.156.366-.243.586-.243h4.342c.22 0 .431.087.586.243.156.155.243.366.243.586 0 .107-.053.207-.142.266-.595.397-2.858 1.905-2.858 1.905s-2.263-1.508-2.858-1.905c-.089-.059-.142-.159-.142-.266z" fill="#666"/><path d="m12 27 4-3 4 3" fill="none" stroke="#808080" stroke-width="1.5"/></g></svg>
|
After Width: | Height: | Size: 3.7 KiB |
1
static/img/emoji/mutant/cat_scream.svg
Normal file
After Width: | Height: | Size: 4.9 KiB |
1
static/img/emoji/mutant/cat_smile.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m27 14s.698-2.442 1.269-4.441c.485-1.698.731-3.455.731-5.22 0-.626 0-1.239 0-1.68 0-.364-.295-.659-.659-.659 0 0 0 0-.001 0-1.842 0-3.635.603-5.102 1.718-2.666 2.024-6.738 5.115-6.738 5.115z"/></clipPath><clipPath id="c"><path clip-rule="evenodd" d="m5 14s-.698-2.442-1.269-4.441c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.364.295-.659.659-.659h.001c1.842 0 3.635.603 5.102 1.718 2.666 2.024 6.738 5.115 6.738 5.115z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m19.491 4.051 2.537-1.926c1.816-1.379 4.033-2.125 6.312-2.125h.001c1.469 0 2.659 1.19 2.659 2.659v1.68c0 1.951-.272 3.893-.808 5.769l-.719 2.516c1.962 5.118.761 10.971-3.175 14.906-.432.432-.853.853-1.248 1.248-2.063 2.063-4.861 3.222-7.778 3.222-.831 0-1.713 0-2.544 0-2.917 0-5.715-1.159-7.778-3.222-.395-.395-.816-.816-1.248-1.248-3.936-3.935-5.137-9.788-3.175-14.906l-.719-2.516c-.536-1.876-.808-3.818-.808-5.769 0-.626 0-1.239 0-1.68 0-1.469 1.19-2.659 2.659-2.659h.001c2.279 0 4.496.746 6.312 2.125l2.537 1.926c.348-.034.699-.051 1.053-.051h4.876c.354 0 .705.017 1.053.051z"/><path d="m27 14s.698-2.442 1.269-4.441c.485-1.698.731-3.455.731-5.22 0-.626 0-1.239 0-1.68 0-.364-.295-.659-.659-.659 0 0 0 0-.001 0-1.842 0-3.635.603-5.102 1.718-2.666 2.024-6.738 5.115-6.738 5.115z" fill="#353535"/><g clip-path="url(#b)"><path d="m21 8s1.18-1.18 2.258-2.258c1.149-1.149 2.52-2.053 4.029-2.657 1.317-.527 2.713-1.085 2.713-1.085v12h-9z" fill="#4b4b4b"/></g><path d="m5 14s-.698-2.442-1.269-4.441c-.485-1.698-.731-3.455-.731-5.22 0-.626 0-1.239 0-1.68 0-.364.295-.659.659-.659h.001c1.842 0 3.635.603 5.102 1.718 2.666 2.024 6.738 5.115 6.738 5.115z" fill="#353535"/><g clip-path="url(#c)"><path d="m11 8s-1.18-1.18-2.258-2.258c-1.149-1.149-2.52-2.053-4.029-2.657-1.317-.527-2.713-1.085-2.713-1.085v12h9z" fill="#4b4b4b"/></g><path d="m13.562 6c-3.409 0-6.525 1.926-8.05 4.975-.21.421-.426.853-.644 1.289-2.31 4.62-1.404 10.2 2.248 13.852.432.432.853.853 1.248 1.248 1.688 1.688 3.977 2.636 6.364 2.636h2.544c2.387 0 4.676-.948 6.364-2.636l1.248-1.248c3.652-3.652 4.558-9.232 2.248-13.852-.218-.436-.434-.868-.644-1.289-1.525-3.049-4.641-4.975-8.05-4.975-1.579 0-3.297 0-4.876 0z" fill="#353535"/><path d="m9.502 19c.928 0 1.817-.369 2.473-1.025s1.025-1.545 1.025-2.473c0-.384 0-.775 0-1.16 0-1.933-1.567-3.5-3.5-3.5h-.002c-.928 0-1.817.369-2.473 1.025s-1.025 1.546-1.025 2.473v1.16c0 1.933 1.567 3.5 3.5 3.5z" fill="#fbe844"/><path d="m9 12.841c0-.264.105-.519.293-.706.187-.187.441-.293.706-.293h.002c.265 0 .519.106.706.293.188.187.293.442.293.706v4.16c0 .265-.105.519-.293.706-.187.188-.441.293-.706.293-.001 0-.001 0-.002 0-.265 0-.519-.105-.706-.293-.188-.187-.293-.441-.293-.706 0-1.146 0-3.014 0-4.16z"/><path d="m22.498 19c-.928 0-1.817-.369-2.473-1.025s-1.025-1.545-1.025-2.473c0-.384 0-.775 0-1.16 0-1.933 1.567-3.5 3.5-3.5h.002c.928 0 1.817.369 2.473 1.025s1.025 1.546 1.025 2.473v1.16c0 1.933-1.567 3.5-3.5 3.5z" fill="#fbe844"/><path d="m23 12.841c0-.264-.105-.519-.293-.706-.187-.187-.441-.293-.706-.293-.001 0-.001 0-.002 0-.265 0-.519.106-.706.293-.188.187-.293.442-.293.706v4.16c0 .265.105.519.293.706.187.188.441.293.706.293h.002c.265 0 .519-.105.706-.293.188-.187.293-.441.293-.706 0-1.146 0-3.014 0-4.16z"/><path d="m11.534 27.409c-.624-.509-1.165-1.127-1.592-1.839-.524-.873-.942-1.57-.942-1.57s.905.226 1.854.464c1.367.341 2.814.091 3.986-.691.621-.414 1.16-.773 1.16-.773s.539.359 1.16.773c1.172.782 2.619 1.032 3.986.691.949-.238 1.854-.464 1.854-.464s-.418.697-.942 1.57c-.427.712-.968 1.33-1.592 1.839-1.066-.897-7.866-.897-8.932 0z" fill="#808080"/><path d="m11.534 27.409c1.066-.897 2.429-1.409 3.863-1.409h1.206c1.434 0 2.797.512 3.863 1.409-1.242 1.014-2.814 1.591-4.466 1.591-1.652 0-3.224-.577-4.466-1.591z" fill="#b3b3b3"/><path d="m13 19.819c0-.217.086-.426.24-.579.153-.154.362-.24.579-.24h4.352c.22 0 .431.087.586.243.156.155.243.366.243.586 0 .107-.053.207-.142.266-.595.397-2.858 1.905-2.858 1.905s-2.243-1.495-2.85-1.9c-.094-.062-.15-.168-.15-.28 0-.001 0-.001 0-.001z" fill="#666"/></g></svg>
|
After Width: | Height: | Size: 4.3 KiB |
1
static/img/emoji/mutant/chef.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41421" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m19.854 25.073c2.355.405 4.146 2.457 4.146 4.927h-16c0-2.47 1.791-4.522 4.146-4.927.469 1.687 7.239 1.687 7.708 0z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m22 15c0-1.591-.632-3.117-1.757-4.243-1.126-1.125-2.652-1.757-4.243-1.757-1.591 0-3.117.632-4.243 1.757-1.125 1.126-1.757 2.652-1.757 4.243v2c0 1.591.632 3.117 1.757 4.243 1.126 1.125 2.652 1.757 4.243 1.757 1.591 0 3.117-.632 4.243-1.757 1.125-1.126 1.757-2.652 1.757-4.243 0-.663 0-1.337 0-2z"/></clipPath><clipPath id="c"><path clip-rule="evenodd" d="m22 9c1.105 0 2-.895 2-2s-.895-2-2-2c-3.074 0-8.926 0-12 0-1.105 0-2 .895-2 2s.895 2 2 2v3h12z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><path d="m8 12h16v3.002c.004.699.004 1.398-.001 2.097-.006.363-.033.724-.087 1.082-.11.742-.326 1.467-.638 2.149-.437.954-1.062 1.819-1.831 2.533-.156.145-.318.283-.485.415.315.092.624.206.924.341.564.255 1.094.586 1.572.98 1.089.899 1.894 2.126 2.28 3.486.177.622.262 1.263.266 1.909v2.006h-20c0-.727-.012-1.453.002-2.18.026-.818.181-1.632.486-2.393.21-.523.477-1.021.804-1.481.717-1.007 1.7-1.817 2.826-2.327.3-.135.61-.25.926-.341-.478-.377-.913-.808-1.294-1.285-.489-.611-.887-1.295-1.178-2.022-.254-.636-.427-1.305-.511-1.985-.037-.294-.055-.59-.06-.887-.005-.7-.005-1.399-.001-2.099z"/><path d="m19.854 25.073c2.355.405 4.146 2.457 4.146 4.927h-16c0-2.47 1.791-4.522 4.146-4.927.469 1.687 7.239 1.687 7.708 0z" fill="#fff"/><g clip-path="url(#a)"><path d="m13 26h2v5h-2z" fill="#666"/></g><path d="m12.146 25.073c.277-.048.563-.073.854-.073h6c.291 0 .577.025.854.073-.469 1.687-2.018 2.927-3.854 2.927s-3.385-1.24-3.854-2.927z" fill="#740d0d"/><path d="m22 15c0-1.591-.632-3.117-1.757-4.243-1.126-1.125-2.652-1.757-4.243-1.757-1.591 0-3.117.632-4.243 1.757-1.125 1.126-1.757 2.652-1.757 4.243v2c0 1.591.632 3.117 1.757 4.243 1.126 1.125 2.652 1.757 4.243 1.757 1.591 0 3.117-.632 4.243-1.757 1.125-1.126 1.757-2.652 1.757-4.243 0-.663 0-1.337 0-2z" fill="#5963ef"/><g clip-path="url(#b)"><path d="m20 15c0-.552-.448-1-1-1s-1 .448-1 1v1c0 .552.448 1 1 1s1-.448 1-1c0-.322 0-.678 0-1zm-6 0c0-.552-.448-1-1-1s-1 .448-1 1v1c0 .552.448 1 1 1s1-.448 1-1c0-.322 0-.678 0-1z"/></g><path d="m22.102 3.001c.169.007.337.019.505.045.39.06.772.178 1.128.349.962.464 1.713 1.312 2.055 2.323.128.38.199.779.209 1.18.01.403-.041.808-.151 1.196-.133.468-.352.911-.644 1.301-.326.435-.737.793-1.204 1.07v3.535h-16v-3.535c-.08-.047-.079-.047-.157-.096-.081-.053-.081-.053-.16-.108-.129-.094-.254-.193-.373-.3-.284-.259-.531-.557-.73-.885-.238-.392-.407-.823-.499-1.272-.081-.397-.102-.807-.061-1.21.037-.364.124-.721.258-1.061.367-.931 1.086-1.704 1.987-2.138.356-.171.738-.289 1.128-.349.168-.026.336-.038.505-.045 4.068-.052 8.136-.052 12.204 0z" fill-rule="nonzero"/><path d="m22 9c1.105 0 2-.895 2-2s-.895-2-2-2c-3.074 0-8.926 0-12 0-1.105 0-2 .895-2 2s.895 2 2 2v3h12z" fill="#ebebeb"/><g clip-path="url(#c)"><path d="m7 8h18v2h-18z" fill="#9d9d9d"/></g></svg>
|
After Width: | Height: | Size: 3.1 KiB |
1
static/img/emoji/mutant/detective.svg
Normal file
After Width: | Height: | Size: 5.4 KiB |
1
static/img/emoji/mutant/ear.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m12 30c-1.326 0-2.598-.527-3.536-1.464-.937-.938-1.464-2.21-1.464-3.536 0-3.742 0-8.974 0-13.502 0-2.519 1.001-4.935 2.782-6.716s4.197-2.782 6.716-2.782h.786c2.577 0 5.048 1.024 6.87 2.846s2.846 4.293 2.846 6.87v.001c0 3.344-1.501 6.511-4.089 8.628-3.129 2.56-6.911 5.655-6.911 5.655 0 2.209-1.791 4-4 4z" fill="none" stroke="#000" stroke-width="4"/><path d="m12 30c-1.326 0-2.598-.527-3.536-1.464-.937-.938-1.464-2.21-1.464-3.536 0-3.742 0-8.974 0-13.502 0-2.519 1.001-4.935 2.782-6.716s4.197-2.782 6.716-2.782h.786c2.577 0 5.048 1.024 6.87 2.846s2.846 4.293 2.846 6.87v.001c0 3.344-1.501 6.511-4.089 8.628-3.129 2.56-6.911 5.655-6.911 5.655 0 2.209-1.791 4-4 4z" fill="#a3a9ff"/><path d="m10 12v8c0 1.061.421 2.078 1.172 2.828.75.751 1.767 1.172 2.828 1.172h1s4.753-4.753 7.351-7.351c1.056-1.056 1.649-2.488 1.649-3.981 0-.514 0-1.082 0-1.668 0-3.314-2.686-6-6-6-.333 0-.667 0-1 0-3.314 0-6 2.686-6 6z" fill="#8484f6"/><path d="m13 17c0-.796-.316-1.559-.879-2.121-.562-.563-1.325-.879-2.121-.879-.574 0-1 0-1 0v6h1c.796 0 1.559-.316 2.121-.879.563-.562.879-1.325.879-2.121z" fill="#a3a9ff"/><g fill="none" stroke-width="2"><path d="m15 23s2.864-2.228 5.361-4.17c2.296-1.785 3.639-4.531 3.639-7.44 0-.001 0-.001 0-.002 0-3.528-2.86-6.388-6.388-6.388-.037 0-.075 0-.112 0-3.59 0-6.5 2.91-6.5 6.5v2.5s.808.808 1.586 1.586c.781.781.781 2.047 0 2.828-.778.778-1.586 1.586-1.586 1.586" stroke="#343394"/><path d="m15 10c2.761 0 5 2.239 5 5" stroke="#a3a9ff"/></g></g></svg>
|
After Width: | Height: | Size: 1.8 KiB |
1
static/img/emoji/mutant/eye.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m2 16s1.796-1.796 4.1-4.1c2.626-2.626 6.187-4.101 9.9-4.101s7.274 1.475 9.9 4.101c2.304 2.304 4.1 4.1 4.1 4.1s-1.796 1.796-4.1 4.1c-2.626 2.626-6.187 4.101-9.9 4.101s-7.274-1.475-9.9-4.101c-2.304-2.304-4.1-4.1-4.1-4.1z" fill="none" stroke="#000" stroke-width="4"/><path d="m11.083 8.691c-1.876 1.465 11.462 1.271 9.834 0 1.853.695 3.556 1.782 4.983 3.209 2.304 2.304 4.1 4.1 4.1 4.1s-1.796 1.796-4.1 4.1c-2.626 2.626-6.187 4.101-9.9 4.101s-7.274-1.475-9.9-4.101c-2.304-2.304-4.1-4.1-4.1-4.1s1.796-1.796 4.1-4.1c1.427-1.427 3.13-2.514 4.983-3.209z" fill="#fff"/><path d="m11.083 8.691c1.558-.584 3.221-.892 4.917-.892s3.36.308 4.917.892c1.628 1.271 2.752 3.158 3.021 5.309l-2.938 6-6 2.938c-3.944-.493-7-3.861-7-7.938 0-2.562 1.207-4.844 3.083-6.309z" fill="#666"/><path d="m23.938 14c.041.328.062.661.062 1 0 4.415-3.585 8-8 8-.339 0-.672-.021-1-.062v-1.938c0-.265.105-.52.293-.707.187-.188.442-.293.707-.293 2.761 0 5-2.239 5-5 0-.265.105-.52.293-.707.187-.188.442-.293.707-.293z" fill="#454545"/><circle cx="16" cy="15" r="4"/><circle cx="13" cy="12" fill="#fff" fill-opacity=".498039" r="3"/></g></svg>
|
After Width: | Height: | Size: 1.4 KiB |
1
static/img/emoji/mutant/eyes.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><ellipse cx="8.5" cy="16" fill="none" rx="6.5" ry="13" stroke="#000" stroke-width="4"/><ellipse cx="23.5" cy="16" fill="none" rx="6.5" ry="13" stroke="#000" stroke-width="4"/><path d="m28 6.623c1.232 2.366 2 5.694 2 9.377 0 7.062-2.822 12.817-6.332 12.996 1.15-4.239 3.285-22.672 4.332-22.373z" fill="#d9d9d9"/><path d="m23.668 28.996c-.056.003-.112.004-.168.004-3.587 0-6.5-5.825-6.5-13s2.913-13 6.5-13c1.746 0 3.332 1.379 4.5 3.623v9.264c0 4.749-1.535 9.34-4.332 13.109z" fill="#fff"/><path d="m13 6.623c1.232 2.366 2 5.694 2 9.377 0 7.062-2.822 12.817-6.332 12.996 1.15-4.239 3.285-22.672 4.332-22.373z" fill="#d9d9d9"/><path d="m8.668 28.996c-.056.003-.112.004-.168.004-3.587 0-6.5-5.825-6.5-13s2.913-13 6.5-13c1.746 0 3.332 1.379 4.5 3.623v9.264c0 4.749-1.535 9.34-4.332 13.109z" fill="#fff"/><ellipse cx="4.857" cy="16.75" rx="4.643" ry="5"/><ellipse cx="19.857" cy="16.75" rx="4.643" ry="5"/></g></svg>
|
After Width: | Height: | Size: 1.2 KiB |
1
static/img/emoji/mutant/facepalm.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h32v32h-32z" fill="none"/><path d="m6.448 19.968c-.146-.474-.258-.958-.333-1.448-.07-.461-.105-.925-.114-1.391-.007-1.086-.007-2.172 0-3.258.006-.34.025-.679.064-1.017.085-.741.253-1.473.501-2.177.469-1.33 1.222-2.556 2.196-3.577 1.055-1.107 2.363-1.967 3.8-2.493.739-.27 1.51-.453 2.292-.542.338-.039.677-.058 1.017-.064.129-.001.128-.001.258 0 .34.006.679.025 1.017.064.782.089 1.553.272 2.292.542 1.437.526 2.745 1.386 3.8 2.493.974 1.021 1.727 2.247 2.196 3.577.248.704.416 1.436.501 2.177.039.338.058.677.064 1.017.007 1.086.007 2.172 0 3.258-.007.382-.031.763-.079 1.142-.063.491-.161.976-.296 1.452.614.304 1.184.698 1.685 1.167.69.646 1.248 1.432 1.628 2.299.195.445.343.91.441 1.386.044.212.076.425.103.64l.754 6.785h-27.235c0-2.06-.037-4.12.002-6.18.01-.296.034-.591.079-.884.095-.626.277-1.24.538-1.818.509-1.126 1.32-2.109 2.327-2.826.163-.115.331-.224.502-.324z"/><path d="m24.885 21.591c1.409.756 2.422 2.169 2.609 3.857.252 2.267.506 4.552.506 4.552l-2-2h-9l-2 2h-10s0-1.928 0-4c0-1.742.891-3.276 2.242-4.171.512.926 16.893 1.208 17.643-.238z" fill="#999"/><path d="m24 22.038v7.962h-9l-.275-1.101c-3.443-.552-6.152-3.3-6.645-6.762 2.97.571 12.859.696 15.92-.099z" fill="#737373"/><path d="m7.242 21.829c.79-.524 1.739-.829 2.758-.829h12.525c.85 0 1.654.213 2.36.591-.75 1.446-1.852 2.703-3.193 3.632-.9.624-1.902 1.098-2.955 1.397-1.013.288-2.07.413-3.122.373-1.123-.043-2.237-.275-3.282-.687-1.161-.458-2.232-1.135-3.146-1.985-.774-.722-1.433-1.566-1.945-2.492z" fill="#333"/><path d="m15.545 24.987c-4.207-.236-7.545-3.722-7.545-7.987v-3c0-4.418 3.582-8 8-8 4.418 0 8 3.582 8 8 0 .993-8.455 10.987-8.455 10.987z" fill="#a3a9ff"/><path d="m16.979 9h4v14.262c-1.367 1.088-3.097 1.738-4.979 1.738-.153 0-.305-.004-.455-.013l-2.405-5.61c-.106-.249-.161-.517-.161-.788 0-.953 0-3.404 0-5.589 0-1.061.421-2.078 1.171-2.828.75-.751 1.768-1.172 2.829-1.172z" fill="#8484f6"/><path d="m16.266 18c.338.008.673.05 1.002.133.776.196 1.493.609 2.053 1.181.183.187.355.391.497.611.003.005-.012-.018-.009-.013.027.04.054.08.076.123.068.128.107.271.114.416.005.113-.008.226-.041.334-.117.394-.475.682-.885.712-.113.009-.226-.002-.335-.032-.187-.051-.358-.157-.486-.302-.072-.08-.127-.173-.193-.258-.045-.057-.093-.113-.143-.166-.319-.332-.725-.569-1.174-.675-.166-.04-.336-.06-.507-.064-.181-.001-.363-.004-.544.003-.558.03-1.094.251-1.504.633-.089.083-.171.173-.246.269-.051.064-.096.132-.143.198-.03.037-.03.037-.062.074-.124.129-.272.227-.445.28-.107.032-.221.047-.334.042-.41-.017-.777-.294-.906-.685-.041-.122-.057-.252-.049-.381.01-.145.051-.287.121-.414.047-.085.104-.162.162-.241.121-.164.252-.319.394-.464.56-.572 1.277-.985 2.053-1.181.329-.083.664-.125 1.002-.133.177-.001.355-.001.532 0zm5.769-4.999c.15.007.296.043.43.114.112.058.213.139.295.235.075.087.134.188.175.295.037.097.058.2.064.303.019.374-.179.736-.504.921-.142.081-.298.122-.46.13-1.023.018-2.047.018-3.07 0-.162-.008-.318-.049-.46-.13-.325-.185-.523-.547-.504-.921.006-.103.027-.206.064-.303.041-.107.1-.208.175-.295.082-.096.183-.177.295-.235.134-.071.28-.107.43-.114 1.023-.018 2.047-.018 3.07 0zm-9 0c.15.007.296.043.43.114.112.058.213.139.295.235.075.087.134.188.175.295.133.35.055.755-.198 1.031-.07.076-.152.142-.242.193-.142.081-.298.122-.46.13-1.023.018-2.047.018-3.07 0-.15-.007-.296-.043-.43-.114-.112-.058-.213-.139-.295-.235-.075-.087-.134-.188-.175-.295-.133-.35-.055-.755.198-1.031.07-.076.152-.142.242-.193.142-.081.298-.122.46-.13 1.023-.018 2.047-.018 3.07 0z"/><path d="m20.124 8.001c.165.007.329.017.493.037.404.05.803.15 1.183.297.688.266 1.314.684 1.822 1.218.507.533.894 1.178 1.125 1.876.115.349.192.711.229 1.077.016.162.022.325.024.488v1.006h2.281l-.707 2.828c-.127.491-.283.972-.479 1.44-.452 1.076-1.093 2.063-1.882 2.922l5.405 10.81h-10.005l-3.487-10.46c-.158-.158-.318-.314-.473-.475-.068-.072-.134-.145-.199-.22-.382-.449-.701-.946-.94-1.485-.319-.721-.488-1.496-.512-2.282-.025-1.361-.002-2.723-.002-4.084.002-.163.008-.326.024-.488.037-.366.114-.728.229-1.077.231-.698.618-1.343 1.125-1.876.508-.534 1.134-.952 1.822-1.218.38-.147.779-.247 1.183-.297.164-.02.328-.03.493-.037.416-.005.832-.005 1.248 0z" fill-rule="nonzero"/><path d="m19.006 10c-.348.004-.689.058-1.017.176-.839.3-1.513.974-1.813 1.813-.108.302-.163.616-.175.936-.017 1.384-.041 2.769.002 4.153.019.442.106.877.265 1.291.196.506.493.963.869 1.353l.037.037.7.701 3.18 9.54h5.328l-4.599-9.197c.281-.281.564-.561.842-.844.094-.099.094-.098.186-.198.179-.203.352-.411.512-.629.399-.543.728-1.137.978-1.763.101-.251.189-.508.263-.768.057-.199.105-.4.155-.601h-1.719c0-1.025.012-2.05-.001-3.075-.003-.074-.007-.147-.014-.222-.035-.317-.113-.626-.242-.918-.341-.768-1.003-1.369-1.801-1.633-.281-.093-.572-.14-.867-.151-.357-.004-.713-.001-1.069-.001z" fill="#a3a9ff"/></svg>
|
After Width: | Height: | Size: 4.8 KiB |
1
static/img/emoji/mutant/football.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41421" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><circle cx="16" cy="16" r="16"/><path d="m4.512 24c-.969-1.388-1.692-2.96-2.108-4.652 3.03.438 16.771-13.227 16.953-16.725l.054-.107.167-.054c3.578.945 6.597 3.272 8.45 6.374l1.842 5.249c.086.626.13 1.265.13 1.915 0 2.974-.929 5.732-2.512 8l-7.225 5.338c-1.344.43-2.777.662-4.263.662s-2.919-.232-4.263-.662z" fill="#ebebeb"/><path d="m4.641 7.818c1.878-2.6 4.625-4.531 7.815-5.365l6.918.157c.331 3.092-1.702 7.528-5.469 11.295-3.851 3.852-8.404 5.891-11.501 5.443-.264-1.073-.404-2.194-.404-3.348 0-.379.015-.755.045-1.126z" fill="#fff"/><path d="m17 14.49 11.332-3.966.66 1.888-11.381 3.983 6.841 9.235-1.607 1.191-6.845-9.242-6.741 9.102-1.607-1.191 6.737-9.095-11.407-3.992.661-1.888 11.357 3.975v-11.948h2z" fill="#ccc" fill-rule="nonzero"/><g fill="#303030"><path d="m28.028 8.836c.941 1.576 1.582 3.352 1.842 5.249l-2.282-1.658c-.351-.255-.497-.706-.363-1.118z"/><path d="m27.488 24c-1.74 2.492-4.27 4.393-7.225 5.338l1.51-4.647c.134-.412.518-.691.951-.691z"/><path d="m4.512 24h4.764c.433 0 .817.279.951.691l1.51 4.647c-2.955-.945-5.485-2.846-7.225-5.338z"/><path d="m12.456 2.453c1.132-.296 2.32-.453 3.544-.453 1.237 0 2.436.161 3.578.462l-2.967 2.156c-.351.255-.825.255-1.176 0z"/><path d="m4.641 7.818 1.134 3.491c.134.412-.012.863-.363 1.118l-3.367 2.447c.209-2.621 1.141-5.039 2.596-7.056z"/><path d="m15.412 8.866c.351-.255.825-.255 1.176 0 1.319.958 4.505 3.273 5.824 4.231.351.255.497.706.363 1.118-.504 1.552-1.72 5.296-2.224 6.847-.134.412-.518.691-.951.691-1.631 0-5.569 0-7.2 0-.433 0-.817-.279-.951-.691-.504-1.551-1.72-5.295-2.224-6.847-.134-.412.012-.863.363-1.118 1.319-.958 4.505-3.273 5.824-4.231z"/></g></g></svg>
|
After Width: | Height: | Size: 1.9 KiB |
1
static/img/emoji/mutant/ghost.svg
Normal file
After Width: | Height: | Size: 12 KiB |
1
static/img/emoji/mutant/grumpy_block.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 .017h32v32h-32z"/></clipPath><path d="m0 .017h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m32 8.017c0-4.419-3.582-8-8-8h-16c-4.418 0-8 3.581-8 8v16c0 4.418 3.582 8 8 8h16c4.418 0 8-3.582 8-8z"/><path d="m30 8.017c0-1.592-.632-3.118-1.757-4.243-1.126-1.125-2.652-1.757-4.243-1.757h-16c-1.591 0-3.117.632-4.243 1.757-1.125 1.125-1.757 2.651-1.757 4.243v16c0 1.591.632 3.117 1.757 4.242 1.126 1.126 2.652 1.758 4.243 1.758h16c1.591 0 3.117-.632 4.243-1.758 1.125-1.125 1.757-2.651 1.757-4.242z" fill="#808080"/><g fill="none" stroke="#000" stroke-width="3"><path d="m7 9.017 4 4"/><path d="m21 13.017 4-4"/><path d="m8 24.017s1.841-1.842 3.757-3.758c1.126-1.125 2.652-1.757 4.243-1.757s3.117.632 4.243 1.757c1.916 1.916 3.757 3.758 3.757 3.758"/></g></g></svg>
|
After Width: | Height: | Size: 1.0 KiB |
1
static/img/emoji/mutant/hot_shit.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 .017h32v32h-32z"/></clipPath><path d="m0 .017h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m25 5.015c0-2.761 2.238-4.998 4.998-4.998h2.002v5.716c0 1.257-.464 2.406-1.232 3.284h1.232v7.412c0 3.638-2.949 6.588-6.587 6.588h-4.413v-3.786h-2v-5.048c-.835.266-1.715.405-2.608.405h-2.392v-5.106c0-2.283.907-4.473 2.521-6.087 1.615-1.614 3.804-2.521 6.087-2.521h2.392z"/><path d="m16.002 2.017c1.591 0 3.116.632 4.241 1.756.921.921 1.511 2.109 1.695 3.383 1.454.283 2.803.994 3.866 2.057 1.406 1.406 2.196 3.313 2.196 5.302v.004c0 .502-.05 1-.149 1.485.657.361 1.266.816 1.806 1.356 1.488 1.488 2.33 3.503 2.343 5.607v.05c0 2.121-.843 4.156-2.343 5.657-1.5 1.5-3.535 2.343-5.657 2.343 0 0-16 0-16.006 0-.884-.003-1.763-.148-2.599-.436-1.35-.465-2.564-1.294-3.488-2.381-.677-.795-1.195-1.723-1.517-2.717-.258-.794-.387-1.625-.39-2.46v-.056c.013-2.104.855-4.119 2.343-5.607.54-.54 1.149-.995 1.806-1.356-.099-.485-.149-.983-.149-1.485v-.004c0-1.989.79-3.896 2.196-5.302.799-.799 1.759-1.399 2.804-1.768v-3.428c.027-1.071.828-1.916 1.897-1.998l.103-.002z"/><path d="m21 10.716c-1.233 1.199-2.886 1.872-4.608 1.872h-.392s0-1.384 0-3.106c0-1.753.696-3.434 1.935-4.673 1.24-1.239 2.92-1.935 4.673-1.935h.392v3.106c0 .428-.041.851-.122 1.265.362-.149.754-.228 1.154-.228h1.968v4.282c.495-.183 1.029-.282 1.587-.282h2.413v5.412c0 2.534-2.054 4.588-4.587 4.588h-2.413v-3.786h-.032-1.968zm9-8.699v3.716c0 1.656-1.342 2.998-2.998 2.998h-.002s0-1.927 0-3.716c0-1.656 1.342-2.998 2.998-2.998z" fill="#f08c00"/><path d="m21.032 6.017h.968v3.18c.322-.117.669-.18 1.032-.18h.968v4.781c.538-.486 1.25-.781 2.032-.781h1.968v3.968c0 1.674-1.357 3.032-3.032 3.032h-1.968v-3.782c-.538.486-1.25.782-2.032.782h-.968v-4.18c-.322.116-.669.18-1.032.18h-.968s0-2.077 0-3.969c0-1.674 1.357-3.031 3.032-3.031z" fill="#ffbf36"/><path d="m16.002 4.017c1.06 0 2.077.421 2.827 1.171.75.749 1.171 1.766 1.171 2.827v.004c0 .339-.043.674-.127.998h.629c1.458 0 2.857.579 3.888 1.61s1.61 2.43 1.61 3.888v.004c0 .933-.237 1.841-.678 2.645 1.097.248 2.112.802 2.921 1.61 1.116 1.116 1.747 2.628 1.757 4.205v.038c0 1.591-.632 3.117-1.757 4.242-1.126 1.126-2.652 1.758-4.243 1.758h-16c-.664-.002-1.326-.111-1.954-.327-1.012-.349-1.923-.97-2.616-1.786-.508-.596-.896-1.292-1.138-2.037-.193-.598-.29-1.223-.292-1.85v-.038c.01-1.577.641-3.089 1.757-4.205.809-.808 1.824-1.362 2.921-1.61-.441-.804-.678-1.712-.678-2.645v-.004c0-1.458.579-2.857 1.61-3.888.975-.974 2.277-1.545 3.648-1.605l-.004-.01c-.167-.481-.252-.986-.254-1.495v-3.5h5.002z" fill="#9a6f42"/><path d="m10.731 25.852c-.071-.048-.136-.105-.195-.172-.279-.321-.324-.783-.113-1.153.353-.618.733-1.283 1.089-1.906.92-1.611 2.633-2.604 4.487-2.604h.002c1.854 0 3.567.993 4.487 2.604.356.623.736 1.288 1.089 1.906.211.37.166.832-.113 1.153-.059.067-.124.124-.195.172l-5.269-1.835z" fill="#352412"/><path d="m16.107 23.017c1.828 0 3.558.831 4.7 2.259l.462.576c-.271.183-.619.225-.931.1-.379-.152-.753-.301-1.086-.435-.827-.33-1.71-.5-2.6-.5h-1.304c-.89 0-1.773.17-2.6.5-.333.134-.707.283-1.086.435-.312.125-.66.083-.931-.1l.462-.576c1.142-1.428 2.872-2.259 4.7-2.259z" fill="#1f140a"/><path d="m11 12.017c.271 0 .534.036.784.103.216.88 1.799 4.711 2.216 4.398v.501c0 .795-.316 1.557-.878 2.12-.562.562-1.325.878-2.12.878-.001 0-.001 0-.002 0-1.657 0-3-1.343-3-3 0-.655 0-1.348 0-2.002 0-.795.316-1.558.878-2.12s1.325-.878 2.12-.878z" fill="#fff"/><path d="m11.784 12.12c1.277.345 2.216 1.511 2.216 2.897v1.501c-.417.313-.936.499-1.498.499h-.004c-1.38 0-2.498-1.119-2.498-2.498v-.004c0-1.132.752-2.088 1.784-2.395z"/><path d="m21 12.017c.271 0 .534.036.784.103.216.88 1.799 4.711 2.216 4.398v.501c0 .795-.316 1.557-.878 2.12-.562.562-1.325.878-2.12.878-.001 0-.001 0-.002 0-1.657 0-3-1.343-3-3 0-.655 0-1.348 0-2.002 0-.795.316-1.558.878-2.12s1.325-.878 2.12-.878z" fill="#fff"/><path d="m21.784 12.12c1.277.345 2.216 1.511 2.216 2.897v1.501c-.417.313-.936.499-1.498.499h-.004c-1.38 0-2.498-1.119-2.498-2.498v-.004c0-1.132.752-2.088 1.784-2.395z"/></g></svg>
|
After Width: | Height: | Size: 4.1 KiB |
1
static/img/emoji/mutant/jack_o_lantern.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41421" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m20.465 7.069c.161.017.322.037.483.061 1.116.163 2.208.482 3.237.944 1.403.629 2.684 1.524 3.758 2.624.981 1.006 1.786 2.18 2.371 3.457.52 1.135.863 2.348 1 3.589.148 1.335.06 2.693-.257 3.998-.07.287-.151.572-.243.853-.094.29-.202.575-.306.86-.401 1.101-.95 2.146-1.63 3.1-.903 1.266-2.035 2.365-3.325 3.233-1.395.939-2.972 1.603-4.619 1.944-.783.161-1.577.246-2.375.266-1.663.024-3.327.009-4.99.001-.423-.006-.845-.028-1.266-.074-.826-.088-1.644-.257-2.438-.502-1.406-.434-2.736-1.109-3.917-1.987-1.084-.806-2.041-1.781-2.826-2.881-.657-.922-1.185-1.927-1.588-2.985-.09-.244-.179-.488-.266-.734-.138-.4-.259-.805-.354-1.217-.199-.859-.299-1.74-.298-2.621.001-1.05.147-2.099.431-3.11.621-2.206 1.89-4.219 3.594-5.749 1.115-1.002 2.415-1.796 3.815-2.331.911-.349 1.863-.588 2.831-.71.083-.011.166-.02.249-.029l2.022-6.069h4.884l2.023 6.069z"/><path d="m12 12 3-9h2l3 9z" fill="#219555"/><path d="m28.801 15.729c-1.482-4.042-5.33-6.729-9.635-6.729-2.049 0-4.283 0-6.332 0-4.305 0-8.153 2.687-9.635 6.729v.001c-.774 2.112-.777 4.429-.009 6.543.059.162.119.327.18.494 1.579 4.342 5.706 7.233 10.326 7.233h4.608c4.62 0 8.747-2.891 10.326-7.233.061-.167.121-.332.18-.494.768-2.114.765-4.431-.009-6.543 0 0 0 0 0-.001z" fill="#ec6c10"/><g fill="#ffec70"><path d="m5 17 4 6 3-2 2 2 2-2 2 2 2-2 3 2 4-6v3.528c0 2.741-1.549 5.246-4 6.472l-3-2-2 2-2-2-1.624 2-2.376-2-3 2c-2.451-1.226-4-3.731-4-6.472 0-1.831 0-3.528 0-3.528z"/><path d="m7 13 6 5s-.926.309-2.051.684c-.915.305-1.921.151-2.703-.413-.782-.563-1.246-1.469-1.246-2.433 0-1.504 0-2.838 0-2.838z"/><path d="m25 13-6 5s.926.309 2.051.684c.915.305 1.921.151 2.703-.413.782-.563 1.246-1.469 1.246-2.433 0-1.504 0-2.838 0-2.838z"/></g></g></svg>
|
After Width: | Height: | Size: 2.0 KiB |
1
static/img/emoji/mutant/long_pointed_ear.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m6 30c-1.657 0-3-1.343-3-3 0-2.684 0-6.737 0-10.317 0-4.531 3.046-8.495 7.423-9.663 5.051-1.347 11.657-3.108 16.417-4.377.844-.225 1.737.124 2.205.862.467.738.401 1.695-.163 2.362-2.624 3.101-5.697 6.733-6.612 7.814-.18.213-.354.43-.521.653-.601.803-2.178 2.904-3.528 4.705-1.472 1.962-3.237 3.687-5.233 5.113-1.897 1.354-3.988 2.848-3.988 2.848 0 1.657-1.343 3-3 3z" fill="none" stroke="#000" stroke-width="4"/><path d="m6 30c-1.657 0-3-1.343-3-3 0-2.684 0-6.737 0-10.317 0-4.531 3.046-8.495 7.423-9.663 5.051-1.347 11.657-3.108 16.417-4.377.844-.225 1.737.124 2.205.862.467.738.401 1.695-.163 2.362-2.624 3.101-5.697 6.733-6.612 7.814-.18.213-.354.43-.521.653-.601.803-2.178 2.904-3.528 4.705-1.472 1.962-3.237 3.687-5.233 5.113-1.897 1.354-3.988 2.848-3.988 2.848 0 1.657-1.343 3-3 3z" fill="#a3a9ff"/><path d="m5 17v3c0 2.209 1.791 4 4 4h1l6-6 2-3 8-9-2-1-16 6-3 4z" fill="#8484f6"/><path d="m8 18c0-.796-.316-1.559-.879-2.121-.562-.563-1.325-.879-2.121-.879-.574 0-1 0-1 0v6h1c.796 0 1.559-.316 2.121-.879.563-.562.879-1.325.879-2.121z" fill="#a3a9ff"/><g fill="none" stroke-width="2"><path d="m10 23s3.994-3.328 5.465-4.554c.356-.297.686-.624.985-.978.95-1.122 3.07-3.628 3.07-3.628s4.474-5.288 6.502-7.684c.128-.152.142-.37.033-.537-.109-.166-.315-.241-.505-.184-3.06.918-10.26 3.078-14.736 4.421-2.365.709-4.181 2.612-4.78 5.007-.022.088-.034.137-.034.137s.808.808 1.586 1.586c.781.781.781 2.047 0 2.828-.778.778-1.586 1.586-1.586 1.586" stroke="#343394" stroke-linejoin="round"/><path d="m11 13c1.657 0 3 1.343 3 3" stroke="#a3a9ff"/><path d="m17 11h.001c.552 0 .999.447.999.999v.001" stroke="#a3a9ff"/></g></g></svg>
|
After Width: | Height: | Size: 1.9 KiB |
1
static/img/emoji/mutant/mechanical_arm.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m10.008 29.799c-.971.825-2.262 1.186-3.532.975-1.75-.292-4.805-.801-4.805-.801-.964-.161-1.671-.995-1.671-1.973 0 0 0-2.958 0-5.277 0-2.092.471-4.158 1.378-6.044 1.874-3.896 5.32-11.059 5.32-11.059.192-.4.511-.724.908-.922l8.655-4.328c.831-.416 1.793-.484 2.675-.19.881.294 1.61.926 2.025 1.757.74 1.478 1.917 3.833 2.627 5.253.826 1.652.156 3.66-1.496 4.486-.655.328-1.483.742-2.232 1.116-1.003.502-2.164.584-3.228.23-.395-.132-.765-.32-1.099-.556l-1.533.768v3.766h5.929c.411 0 .818.036 1.216.107.955-.715 2.121-1.107 3.327-1.107h1.974c1.473 0 2.886.585 3.927 1.627 1.042 1.041 1.627 2.454 1.627 3.927v4.892c0 1.473-.585 2.886-1.627 3.927-1.041 1.042-2.454 1.627-3.927 1.627h-1.974c-1.206 0-2.372-.392-3.327-1.107-.398.071-.805.107-1.216.107h-5.436c-.655-.002-1.308-.072-1.947-.215-.89-.198-1.748-.532-2.538-.986z"/><path d="m25 22s-.774-.774-1.536-1.536c-.937-.937-2.209-1.464-3.535-1.464-1.737 0-4.258 0-6.325 0-2.152 0-4.063 1.377-4.744 3.419-.449 1.348-.86 2.581-.86 2.581s.396.528.9 1.2c1.322 1.763 3.397 2.8 5.6 2.8h5.429c1.326 0 2.598-.527 3.535-1.464.762-.762 1.536-1.536 1.536-1.536z" fill="#595959"/><path d="m12 17.275c0 .483.04.964.119 1.44.104.622.261 1.566.414 2.485.293 1.757-.281 3.548-1.54 4.807-.744.744-1.549 1.549-2.137 2.137-.537.537-1.301.782-2.051.657-1.75-.292-4.805-.801-4.805-.801v-5.277c0-1.792.403-3.562 1.18-5.177l4.341-9.025 2.479 1.479 2 3z" fill="#323232"/><path d="m8.5 6.486 2.5 1.514 1 4v1l-4.479-4.479z" fill="#818181"/><path d="m14.32 10.834-2.32 1.166-3.5-5.514s5.928-2.963 8.656-4.327c.356-.179.769-.208 1.147-.082s.691.397.869.754l2.231 4.461-.399.671-4.087 1.902-.941.141-.762.381-.594-.044zm7.526-2.645c.256.642-.019 1.384-.648 1.699-.655.327-1.483.741-2.232 1.116-.529.264-1.141.307-1.701.12-.229-.076-.441-.188-.63-.329l.347-.746 4.198-2.052z" fill="#595959"/><path d="m15.976 10.006-1.656.828-1.014-2.028c.298-.149.596-.299.894-.448l1.014 2.029 1.609-.804-1.017-2.034c.298-.149.596-.298.894-.447l1.017 2.033 1.608-.804-1.019-2.039c.298-.149.596-.298.894-.447l1.02 2.039 1.183-.592.396.792c.015.031.029.063.043.095l.004.01-5.211 2.606-.02-.015c-.268-.208-.487-.471-.639-.774z" fill="#1e1e1e"/><path d="m26.446 30c.943 0 1.847-.374 2.513-1.041.667-.667 1.041-1.571 1.041-2.513 0-1.544 0-3.348 0-4.892 0-.942-.374-1.846-1.041-2.513-.666-.667-1.57-1.041-2.513-1.041-.698 0-1.393 0-1.974 0-.942 0-1.846.374-2.513 1.041-.848.848-2.067 2.067-3.084 3.084-1.036 1.036-1.036 2.714 0 3.75l3.084 3.084c.667.667 1.571 1.041 2.513 1.041z" fill="#323232"/><path d="m6 22c1.104 0 2 .896 2 2s-.896 2-2 2-2-.896-2-2 .896-2 2-2zm0 1c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1z" fill="#2176ff"/></g></svg>
|
After Width: | Height: | Size: 2.9 KiB |
1
static/img/emoji/mutant/no_good.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m22 10c0-1.591-.632-3.117-1.757-4.243-1.126-1.125-2.652-1.757-4.243-1.757-1.591 0-3.117.632-4.243 1.757-1.125 1.126-1.757 2.652-1.757 4.243v2c0 1.591.632 3.117 1.757 4.243 1.126 1.125 2.652 1.757 4.243 1.757 1.591 0 3.117-.632 4.243-1.757 1.125-1.126 1.757-2.652 1.757-4.243 0-.663 0-1.337 0-2z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m8.005 12.271c-.002-.057-.003-.114-.004-.172-.005-.733-.005-1.465 0-2.198.015-.854.157-1.699.435-2.506.395-1.145 1.051-2.195 1.907-3.052.833-.833 1.85-1.477 2.96-1.875.835-.299 1.712-.451 2.598-.467.099-.001.099-.001.198 0 .886.016 1.763.168 2.598.467 1.204.431 2.297 1.153 3.166 2.089.757.815 1.339 1.787 1.701 2.838.278.807.42 1.652.435 2.506.005.733.005 1.465 0 2.198-.001.058-.002.115-.004.172.015-.009.031-.018.047-.027.205-.112.43-.187.661-.222.103-.015.129-.015.232-.021.117 0 .117 0 .234.006.117.013.231.03.345.06.226.06.44.16.632.294.097.067.183.144.268.225l1 1c.071.075.091.093.155.174.097.122.179.256.245.397.231.498.246 1.081.041 1.59-.073.183-.175.346-.293.502l-2.462 3.077c.121.087.239.178.354.273 1.112.918 1.927 2.177 2.303 3.569.162.596.239 1.209.243 1.826v7.006h-24c0-2.393-.044-4.787.002-7.18.026-.818.181-1.632.486-2.393.21-.523.478-1.021.804-1.481.444-.623.99-1.171 1.608-1.619l-2.462-3.078c-.062-.082-.08-.102-.135-.19-.082-.132-.149-.274-.199-.422-.175-.52-.125-1.101.135-1.584.093-.174.212-.324.347-.467l1-1c.085-.081.171-.158.268-.225.192-.134.406-.234.632-.294.114-.03.228-.047.345-.06.117-.006.117-.006.234-.006.103.006.129.006.232.021.231.035.456.11.661.222.016.009.032.018.047.027z"/><path d="m8.57 20.629c.104.124 4.518 2.58 4.518 2.58l-1.399 6.791h-5.689v-5c0-1.88 1.037-3.517 2.57-4.371zm9.309 9.371h-3.758l1.879-4.879zm5.542-9.376c1.538.853 2.579 2.493 2.579 4.376v5h-4.939l-2.149-6.791z" fill="#999"/><path d="m8.57 20.629c.72-.401 1.548-.629 2.43-.629h10c.878 0 1.704.227 2.421.624l-.25.313c-.053.063-.053.063-.11.124l-2.149 2.148 2.025 1.62-1.874 2.342-.002 2.829h-3.182l-1.879-1.879-1.879 1.879h-2.432l-.752-2.829-1.874-2.342 2.025-1.62-2.149-2.148-.057-.061c-.104-.123-.208-.247-.312-.371z" fill="#333"/><path d="m12.155 24.276 2.845-.276-.061 3.061-2.939 2.939h-2v-4zm5.046-4.036 2.799-2.24 5-4 1 1-4 5-2.266 2.266-2.533-.106z" fill="#a3a9ff"/><path d="m19.734 22.266-4.795 4.795-2.784-2.785 5.046-4.036z" fill="#343394"/><path d="m22 26v4h-2l-10-10-4-5 1-1z" fill="#a3a9ff"/><path d="m22 10c0-1.591-.632-3.117-1.757-4.243-1.126-1.125-2.652-1.757-4.243-1.757-1.591 0-3.117.632-4.243 1.757-1.125 1.126-1.757 2.652-1.757 4.243v2c0 1.591.632 3.117 1.757 4.243 1.126 1.125 2.652 1.757 4.243 1.757 1.591 0 3.117-.632 4.243-1.757 1.125-1.126 1.757-2.652 1.757-4.243 0-.663 0-1.337 0-2z" fill="#a3a9ff"/><g clip-path="url(#b)"><path d="m20.041 9.001c.141.008.278.041.405.104.109.054.207.128.29.218.244.265.327.651.213.993-.033.098-.081.19-.141.273-.089.122-.204.22-.336.293-.687.355-1.37.72-2.076 1.036-.13.054-.268.084-.409.082-.131-.002-.262-.03-.382-.081-.112-.048-.214-.117-.302-.201-.073-.072-.136-.155-.185-.246-.179-.335-.15-.754.074-1.061.089-.122.204-.22.336-.293.687-.355 1.37-.72 2.076-1.036.087-.036.176-.061.269-.074.056-.006.112-.009.168-.007zm-8.026-.001c.142.004.277.035.407.093.696.336 1.398.664 2.075 1.039.121.072.227.164.311.279.077.105.133.226.164.354.029.118.035.241.02.362-.013.102-.042.202-.085.295-.161.345-.514.573-.894.578-.151.002-.298-.032-.435-.093-.696-.336-1.398-.664-2.075-1.039-.121-.072-.227-.164-.311-.279-.206-.283-.249-.663-.11-.985.037-.086.086-.167.146-.239.077-.094.171-.174.277-.234.123-.07.258-.111.398-.126.037-.003.074-.005.112-.005z"/></g></g></svg>
|
After Width: | Height: | Size: 3.8 KiB |
1
static/img/emoji/mutant/office_worker.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41421" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m20 30c0-2.761-2.239-5-5-5-1.912 0-4.091 0-6.002 0-1.326 0-2.597.527-3.534 1.464s-1.464 2.208-1.464 3.534v.002z"/></clipPath><clipPath id="c"><path clip-rule="evenodd" d="m18 15c0-1.591-.632-3.117-1.757-4.243-1.126-1.125-2.652-1.757-4.243-1.757-1.591 0-3.117.632-4.243 1.757-1.125 1.126-1.757 2.652-1.757 4.243v2c0 1.591.632 3.117 1.757 4.243 1.126 1.125 2.652 1.757 4.243 1.757 1.591 0 3.117-.632 4.243-1.757 1.125-1.126 1.757-2.652 1.757-4.243 0-.663 0-1.337 0-2z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m14 9h16v23h-16z" fill-rule="nonzero"/><path d="m16 11h12v19h-12z" fill="#fff"/><path d="m27 29h-11v-1h11zm0-3h-11v-1h11zm0-3h-11v-1h11zm0-3h-11v-1h11zm0-3h-11v-1h11zm0-3h-11v-1h11z" fill="#b4d7ec"/><path d="m26.97 12.243-1.97 7.88v1.412l-6.799 6.678-1.402-1.426 6.201-6.091v-.819l2.03-8.12c.647.162 1.293.324 1.94.486z" fill="#00a513" fill-rule="nonzero"/><path d="m27 22v2h-2.598l-2.524-5.004-2.004 2.988-1.768-3.537-2-4 1.788-.894 2.232 4.463 1.996-2.976 3.512 6.96z" fill="#e50000" fill-rule="nonzero"/><path d="m7.043 23.279c-.167-.132-.329-.271-.486-.416-.769-.714-1.394-1.579-1.831-2.533-.326-.712-.546-1.471-.652-2.246-.045-.327-.067-.655-.073-.985-.005-.733-.005-1.465 0-2.198.005-.264.019-.527.048-.79.069-.616.21-1.224.419-1.808.386-1.078 1.006-2.069 1.805-2.889.869-.891 1.945-1.573 3.122-1.978.807-.278 1.652-.42 2.506-.435.099-.001.099-.001.198 0 .886.016 1.763.168 2.598.467 1.047.375 2.012.97 2.818 1.736.902.859 1.597 1.927 2.017 3.099.209.584.35 1.192.419 1.808.029.263.043.526.048.79.005.733.005 1.465 0 2.198-.006.33-.028.658-.073.985-.088.646-.256 1.281-.498 1.887-.279.697-.656 1.353-1.117 1.945-.394.506-.849.965-1.353 1.362.316.092.624.206.924.341.564.255 1.094.586 1.572.98 1.134.937 1.959 2.228 2.325 3.653.147.569.217 1.154.221 1.742v2.006h-20c0-.725-.011-1.45.002-2.175.023-.746.156-1.483.408-2.186.523-1.463 1.537-2.728 2.849-3.557.433-.273.897-.499 1.379-.672.134-.048.269-.092.405-.131z"/><path d="m20 30c0-2.761-2.239-5-5-5-1.912 0-4.091 0-6.002 0-1.326 0-2.597.527-3.534 1.464s-1.464 2.208-1.464 3.534v.002z" fill="#303030"/><g clip-path="url(#b)"><path d="m9 26h6v4h-6z" fill="#fff"/><circle cx="12" cy="24" fill="#a3a9ff" r="4"/></g><path d="m18 15c0-1.591-.632-3.117-1.757-4.243-1.126-1.125-2.652-1.757-4.243-1.757-1.591 0-3.117.632-4.243 1.757-1.125 1.126-1.757 2.652-1.757 4.243v2c0 1.591.632 3.117 1.757 4.243 1.126 1.125 2.652 1.757 4.243 1.757 1.591 0 3.117-.632 4.243-1.757 1.125-1.126 1.757-2.652 1.757-4.243 0-.663 0-1.337 0-2z" fill="#a3a9ff"/><g clip-path="url(#c)"><path d="m16 15c0-.552-.448-1-1-1s-1 .448-1 1v1c0 .552.448 1 1 1s1-.448 1-1c0-.322 0-.678 0-1zm-6 0c0-.552-.448-1-1-1s-1 .448-1 1v1c0 .552.448 1 1 1s1-.448 1-1c0-.322 0-.678 0-1z"/></g></g></svg>
|
After Width: | Height: | Size: 3.0 KiB |
1
static/img/emoji/mutant/ok_gesture.svg
Normal file
After Width: | Height: | Size: 10 KiB |
1
static/img/emoji/mutant/person_frowning.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m24 12c0-4.418-3.582-8-8-8-4.418 0-8 3.582-8 8v3c0 4.418 3.582 8 8 8 4.418 0 8-3.582 8-8z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><path d="m10.083 23.062c-.313-.23-.612-.477-.895-.741-.94-.875-1.71-1.931-2.253-3.094-.4-.858-.677-1.771-.82-2.707-.07-.461-.105-.925-.114-1.391-.007-1.086-.007-2.172 0-3.258.006-.34.025-.679.064-1.017.089-.782.272-1.553.542-2.292.513-1.399 1.341-2.677 2.407-3.717 1.067-1.042 2.366-1.841 3.779-2.319.708-.24 1.443-.399 2.187-.475.337-.034.675-.049 1.014-.051.045 0 .09 0 .135.001.34.006.679.025 1.017.064.782.089 1.553.272 2.292.542 1.324.485 2.539 1.253 3.548 2.238 1.095 1.069 1.94 2.388 2.448 3.832.248.704.416 1.436.501 2.177.039.338.058.677.064 1.017.007 1.086.007 2.172 0 3.258-.007.382-.031.763-.079 1.142-.104.82-.311 1.627-.614 2.396-.689 1.747-1.876 3.281-3.386 4.393.019.003.037.005.056.008.657.092 1.301.278 1.906.551.564.255 1.094.586 1.572.98 1.112.918 1.927 2.177 2.303 3.569.162.596.239 1.209.243 1.826v2.006h-24c0-.717-.012-1.454.002-2.18.01-.296.034-.591.079-.884.095-.626.277-1.24.538-1.818.509-1.126 1.32-2.109 2.327-2.826.46-.326.958-.594 1.481-.804.532-.213 1.089-.353 1.656-.426z"/><path d="m21.709 25.05c2.425.344 4.291 2.429 4.291 4.95h-20s0-.001 0-.002c0-1.326.527-2.597 1.464-3.534.769-.769 1.763-1.262 2.828-1.414 1.269 1.785 10.148 1.785 11.417 0z" fill="#999"/><path d="m10.292 25.05c.232-.033.468-.05.706-.05h10.002c.241 0 .477.017.709.05-1.269 1.785-3.354 2.95-5.709 2.95s-4.439-1.165-5.708-2.95z" fill="#a3a9ff"/><path d="m24 12c0-4.418-3.582-8-8-8-4.418 0-8 3.582-8 8v3c0 4.418 3.582 8 8 8 4.418 0 8-3.582 8-8z" fill="#a3a9ff"/><g clip-path="url(#a)"><path d="m16.266 16.001c.338.007.673.049 1.002.132.798.202 1.533.632 2.1 1.23.124.131.24.269.346.414.063.086.128.173.176.267.066.13.104.273.109.418.005.129-.015.258-.059.38-.039.106-.095.205-.167.292-.26.318-.702.445-1.092.314-.171-.058-.316-.16-.436-.293-.031-.037-.059-.075-.087-.116-.002-.003.009.015.007.011-.042-.059-.083-.117-.129-.174-.324-.393-.763-.679-1.258-.804-.178-.045-.36-.067-.543-.072-.181-.001-.363-.004-.544.003-.194.01-.386.042-.573.098-.525.159-.977.498-1.284.951l.006-.009c-.027.04-.027.039-.056.078-.031.037-.031.037-.064.073-.127.126-.277.221-.451.269-.109.03-.222.042-.335.035-.41-.027-.77-.313-.89-.706-.038-.123-.052-.254-.04-.382s.048-.254.108-.369c.048-.093.111-.179.174-.264.12-.163.251-.318.393-.463.56-.572 1.277-.985 2.053-1.181.329-.083.664-.125 1.002-.132.177-.002.355-.002.532 0zm-3.266-6.001v2.5c0 .398-.158.779-.439 1.061-.282.281-.663.439-1.061.439s-.779-.158-1.061-.439c-.281-.282-.439-.663-.439-1.061v-.5l2-2zm7 0 2 2v.5c0 .398-.158.779-.439 1.061-.282.281-.663.439-1.061.439s-.779-.158-1.061-.439c-.281-.282-.439-.663-.439-1.061v-2.5z"/></g></svg>
|
After Width: | Height: | Size: 2.9 KiB |
1
static/img/emoji/mutant/raising_hand.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m24 14c0-2.761-2.239-5-5-5-2.761 0-5 2.239-5 5v2c0 2.761 2.239 5 5 5 2.761 0 5-2.239 5-5 0-.661 0-1.339 0-2z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m7.153 1.003.151.012.15.019.149.026.145.034.143.041.14.047.138.054.133.06.129.067.126.072.122.078.117.084.113.088.109.094.104.099.099.104.094.109.089.113.083.117.078.122.072.125.067.13.06.134.054.137.047.14.041.143.034.146.026.147.019.151.012.152.003.127v4.05l-.003.124-.011.147-.018.147-.026.145-.032.143-.039.142-.046.139-.053.136-.059.134-.066.131-.072.128-.078.124-.085.12-.091.117-.097.112-.089.093.764 6.872 4.825 4.021h8.288l.112.001.124.005.123.008.123.01.122.014.122.017.122.019.12.023.12.025.119.029.118.031.117.034.117.037.115.04.114.042.113.045.113.049.11.05.11.054.109.056.107.059.105.061.104.064.103.067.101.069.1.072.098.074.096.077.094.08.093.082.091.084.089.086.086.089.084.091.082.093.08.094.077.096.074.098.072.1.069.101.067.103.064.104.061.105.059.108.056.108.054.11.05.11.049.113.045.113.042.114.04.116.037.116.034.117.031.118.029.119.025.12.023.121.019.121.017.121.014.123.01.123.008.123.005.124.001.112v6.012h-17.149l-7.174-12.299-.037-.065-.04-.072-.039-.073-.037-.074-.036-.074-.035-.075-.034-.075-.033-.076-.031-.077-.03-.077-.028-.077-.027-.077-.027-.079-.024-.078-.024-.079-.022-.079-.021-.08-.019-.079-.018-.081-.017-.081-.016-.08-.014-.081-.013-.082-.011-.082-.011-.081-.008-.082-.008-.082-.006-.083-.005-.083-.003-.082-.002-.083-.001-.075v-13.222l.003-.128.012-.151.019-.15.026-.148.034-.146.041-.144.047-.139.054-.137.06-.134.067-.129.072-.126.078-.122.083-.117.089-.113.094-.109.099-.104.104-.099.109-.094.112-.088.118-.084.122-.078.125-.072.13-.067.133-.06.137-.054.141-.047.143-.041.145-.034.149-.026.15-.019.151-.012.128-.003h1.05l.128.003zm5.996 26.997h10.851v-1.988-.037l-.001-.025-.002-.024-.002-.025-.003-.024-.003-.025-.004-.024-.005-.024-.005-.024-.005-.024-.007-.023-.006-.024-.008-.023-.008-.023-.008-.023-.009-.023-.01-.022-.01-.022-.011-.022-.011-.022-.012-.021-.012-.021-.013-.021-.013-.021-.014-.02-.014-.02-.015-.02-.016-.019-.015-.018-.017-.019-.017-.018-.017-.018-.018-.017-.018-.017-.018-.017-.019-.015-.02-.016-.019-.015-.02-.014-.02-.014-.021-.013-.02-.013-.022-.012-.021-.012-.022-.011-.022-.011-.022-.01-.022-.01-.023-.009-.023-.008-.023-.008-.023-.008-.024-.006-.023-.007-.024-.005-.024-.005-.024-.005-.024-.004-.025-.003-.024-.003-.025-.002-.024-.002-.025-.001h-.037-9.712l-3.653-3.044 3.526 6.044z"/><path d="m24 14c0-2.761-2.239-5-5-5-2.761 0-5 2.239-5 5v2c0 2.761 2.239 5 5 5 2.761 0 5-2.239 5-5 0-.661 0-1.339 0-2z" fill="none" stroke="#000" stroke-width="4"/><path d="m23 23c.796 0 1.559.316 2.121.879.563.562.879 1.325.879 2.121v4h-14s-5.095-8.734-6.591-11.299c-.129-.221-.229-.457-.297-.701l.297-1h1.591l1 1 6 5h1.536c.692 1.195 6.236 1.195 6.928 0z" fill="#999"/><g fill="#a3a9ff"><path d="m5.112 18c-.074-.263-.112-.536-.112-.811 0-2.213 0-8.189 0-8.189v-5c0-.552.448-1 1-1h1c.552 0 1 .448 1 1v4c0 .265-.105.52-.293.707-.187.188-.442.293-.707.293l1 9z"/><path d="m15.536 23h6.928c-.692 1.195-1.985 2-3.464 2s-2.772-.805-3.464-2z"/><path d="m24 14c0-2.761-2.239-5-5-5-2.761 0-5 2.239-5 5v2c0 2.761 2.239 5 5 5 2.761 0 5-2.239 5-5 0-.661 0-1.339 0-2z"/></g><g clip-path="url(#b)"><path d="m22.02 13c.113.004.224.024.33.063.276.103.496.328.593.605.036.101.054.206.057.312.003.366.022.734-.003 1.099-.013.14-.051.275-.118.398-.06.111-.141.21-.238.29-.092.077-.197.137-.309.176-.107.038-.219.057-.332.057-.391 0-.755-.237-.914-.594-.054-.122-.082-.253-.086-.386-.003-.366-.022-.734.003-1.099.009-.1.031-.197.068-.29.095-.242.286-.44.523-.545.098-.043.201-.069.307-.081.039-.004.079-.005.119-.005zm-6 0c.113.004.224.024.33.063.276.103.496.328.593.605.036.101.054.206.057.312.003.366.022.734-.003 1.099-.013.14-.051.275-.118.398-.06.111-.141.21-.238.29-.092.077-.197.137-.309.176-.107.038-.219.057-.332.057-.391 0-.755-.237-.914-.594-.054-.122-.082-.253-.086-.386-.003-.366-.022-.734.003-1.099.009-.1.031-.197.068-.29.095-.242.286-.44.523-.545.098-.043.201-.069.307-.081.039-.004.079-.005.119-.005z"/></g></g></svg>
|
After Width: | Height: | Size: 4.3 KiB |
1
static/img/emoji/mutant/robot.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 .017h32v32h-32z"/></clipPath><path d="m0 .017h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m28 30.017h-24v-3c0-.531.211-1.039.586-1.415.375-.375.884-.585 1.414-.585h.757c.796 0 1.559.316 2.122.878.181.182.368.368.535.536.375.375.884.586 1.414.586h10.344c.53 0 1.039-.211 1.414-.586.167-.168.354-.354.535-.536.563-.562 1.326-.878 2.122-.878h.757c.53 0 1.039.21 1.414.585.375.376.586.884.586 1.415zm-1-22.286v-5.714h2v6.586c.614.354 1 1.012 1 1.732v8.363c0 .8-.477 1.523-1.212 1.838-.912.391-2.253.966-3.728 1.598-5.785 2.479-12.335 2.479-18.12 0-1.475-.632-2.816-1.207-3.728-1.598-.735-.315-1.212-1.038-1.212-1.838 0-2.116 0-6.246 0-8.363 0-.8.477-1.523 1.212-1.838.912-.39 2.253-.965 3.728-1.597 5.785-2.48 12.335-2.48 18.12 0z" fill="none" stroke="#000" stroke-width="4"/><path d="m8.879 25.895c.181.182.368.368.535.536.375.375.884.586 1.414.586h10.344c.53 0 1.039-.211 1.414-.586l.46-.46v3.546h-14.167z" fill="#404040"/><path d="m28 30.017h-24v-3c0-.531.211-1.039.586-1.415.375-.375.884-.585 1.414-.585h.757c.769 0 1.508.295 2.122.878l1.364 1.364c1.125 1.126 2.651 1.758 4.242 1.758h3.03c1.591 0 3.117-.632 4.242-1.758l1.364-1.364c.563-.562 1.326-.878 2.122-.878h.757c.53 0 1.039.21 1.414.585.375.376.586.884.586 1.415z" fill="#737373"/><path d="m27 2.017h2v10h-2z" fill="#4d4d4d"/><path d="m28 8.16.788.337c.735.315 1.212 1.038 1.212 1.838v8.363c0 .8-.477 1.523-1.212 1.838-.912.391-2.253.966-3.728 1.598-5.785 2.479-12.335 2.479-18.12 0-1.475-.632-2.816-1.207-3.728-1.598-.735-.315-1.212-1.038-1.212-1.838 0-2.116 0-6.246 0-8.363 0-.8.477-1.523 1.212-1.838l.788-.337z" fill="#8a8a8a"/><path d="m4 8.16 2.94-1.26c5.785-2.48 12.335-2.48 18.12 0l2.94 1.26v8.523c0 .808-.485 1.536-1.231 1.847-.788.328-1.884.784-3.077 1.282-4.923 2.051-10.461 2.051-15.384 0-1.193-.498-2.289-.954-3.077-1.282-.746-.311-1.231-1.039-1.231-1.847z" fill="#333"/><path d="m11 9.517c0-.398-.158-.78-.439-1.061-.282-.281-.663-.439-1.061-.439s-.779.158-1.061.439c-.281.281-.439.663-.439 1.061v2c0 .398.158.779.439 1.06.282.282.663.44 1.061.44s.779-.158 1.061-.44c.281-.281.439-.662.439-1.06z" fill="#58d3d7"/><path d="m24 9.517c0-.398-.158-.78-.439-1.061-.282-.281-.663-.439-1.061-.439s-.779.158-1.061.439c-.281.281-.439.663-.439 1.061v2c0 .398.158.779.439 1.06.282.282.663.44 1.061.44s.779-.158 1.061-.44c.281-.281.439-.662.439-1.06z" fill="#58d3d7"/><path d="m11 16.017h.001c1.296 1.281 3.045 2 4.868 2h.303c1.811 0 3.547-.72 4.828-2" fill="none" stroke="#58d3d7" stroke-width="1.5"/><path d="m18 7.017c0-.553-.448-1-1-1-.611 0-1.389 0-2 0-.552 0-1 .447-1 1 0 .552.448 1 1 1h2c.552 0 1-.448 1-1z" fill="#121212"/></g></svg>
|
After Width: | Height: | Size: 2.8 KiB |
1
static/img/emoji/mutant/shrug.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m7 21 1.447-2.894c.339-.678 1.032-1.106 1.789-1.106h11.528c.757 0 1.45.428 1.789 1.106.592 1.183 1.447 2.894 1.447 2.894l1 1v2l-1 1c-.618 0-1.215-.287-1.6-.8-1.275-1.701-2.4-3.2-2.4-3.2v9h-10v-9s-1.125 1.499-2.4 3.2c-.385.513-.982.8-1.6.8l-1-1v-2z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m21 10c0-2.761-2.239-5-5-5-2.761 0-5 2.239-5 5v3c0 2.761 2.239 5 5 5 2.761 0 5-2.239 5-5 0-.984 0-2.016 0-3z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><path d="m8.991 12c-.001-.697.005-1.393.01-2.09.015-.819.163-1.63.454-2.397.291-.765.717-1.476 1.252-2.095.662-.764 1.49-1.382 2.411-1.799.578-.261 1.192-.443 1.819-.538.292-.045.587-.069.883-.079.09-.001.18-.002.27-.001.848.016 1.694.171 2.483.487.523.21 1.021.477 1.481.804 1.007.717 1.818 1.7 2.327 2.827.249.551.426 1.134.525 1.731.053.321.081.645.092.97.013.727.013 1.453.009 2.18h1.53c.035-.02.07-.039.105-.057l5.512-2.756.846.522v3.573c-.005.275-.03.547-.088.817-.162.762-.55 1.469-1.106 2.016-.232.229-.492.421-.769.592l-.037.021c0 2.117.021 4.235-.001 6.353-.002.079-.006.159-.012.238-.047.522-.184 1.028-.422 1.495-.162.32-.368.618-.61.883-.279.306-.606.567-.965.773-.777.446-1.698.619-2.584.486-.497-.075-.969-.245-1.406-.492v5.536h-14v-5.536l-.099.056-.137.071c-.14.065-.28.127-.425.179-.29.103-.592.172-.898.206-.891.1-1.805-.11-2.564-.586-.35-.219-.666-.493-.933-.809-.264-.312-.475-.662-.635-1.038-.197-.463-.293-.961-.308-1.462l-.001-.071v-6.282c-.078-.044-.076-.045-.156-.095-.271-.18-.523-.38-.746-.616-.505-.532-.857-1.201-1.01-1.918-.058-.27-.083-.542-.088-.818v-3.572l.846-.522 5.511 2.756c.036.018.071.037.106.057z"/><path d="m7 21 1.447-2.894c.339-.678 1.032-1.106 1.789-1.106h11.528c.757 0 1.45.428 1.789 1.106.592 1.183 1.447 2.894 1.447 2.894l1 1v2l-1 1c-.618 0-1.215-.287-1.6-.8-1.275-1.701-2.4-3.2-2.4-3.2v9h-10v-9s-1.125 1.499-2.4 3.2c-.385.513-.982.8-1.6.8l-1-1v-2z" fill="#999"/><g clip-path="url(#a)"><path d="m24.072 14.003c.114.011.223.035.327.08.253.11.453.325.544.585.033.092.049.187.056.284.049 2.031.049 4.065 0 6.096-.012.163-.054.318-.137.459-.191.325-.559.518-.934.49-.097-.007-.192-.028-.283-.062-.105-.04-.204-.098-.29-.171-.098-.083-.181-.185-.24-.299-.069-.131-.103-.271-.114-.417-.049-2.031-.049-4.065 0-6.096.008-.114.03-.223.073-.329.104-.256.314-.46.571-.558.092-.035.186-.053.283-.062.048-.003.096-.003.144 0zm-16 0c.114.011.223.035.327.08.253.11.453.325.544.585.033.092.049.187.056.284.049 2.031.049 4.065 0 6.096-.012.163-.054.318-.137.459-.049.083-.11.159-.181.225-.276.257-.684.337-1.036.203-.105-.04-.204-.098-.29-.171-.098-.083-.181-.185-.24-.299-.069-.131-.103-.271-.114-.417-.049-2.031-.049-4.065 0-6.096.007-.097.023-.192.056-.284.091-.26.291-.475.544-.585.104-.045.213-.069.327-.08.048-.003.096-.003.144 0z" fill="#737373"/><path d="m9.002 13.18c-.02-1.09 14.005-1.18 13.997-.09-.005.268-.021.534-.055.799-.088.688-.278 1.361-.563 1.992-.347.769-.835 1.473-1.431 2.069-.516.516-1.112.951-1.762 1.283-.587.301-1.217.518-1.865.642-1.355.259-2.778.112-4.048-.426-.623-.263-1.207-.618-1.729-1.048-.735-.607-1.345-1.364-1.779-2.213-.328-.639-.555-1.329-.673-2.038-.053-.321-.081-.645-.092-.97z" fill="#333" fill-rule="nonzero"/><circle cx="16" cy="16" fill="#343394" r="4"/></g><path d="m7 25c-.211 0-.424-.033-.632-.103-.817-.272-1.368-1.036-1.368-1.897 0-3.605 0-7.5 0-7.5s-.432-.216-.894-.447c-.678-.339-1.106-1.032-1.106-1.789 0-.63 0-1.264 0-1.264s2.35 1.175 3.447 1.724c.339.169.553.515.553.894zm18-4v-6.382c0-.379.214-.725.553-.894 1.097-.549 3.447-1.724 3.447-1.724v1.264c0 .757-.428 1.45-1.106 1.789-.462.231-.894.447-.894.447v7.5c0 .861-.551 1.625-1.368 1.897-.208.07-.421.103-.632.103z" fill="#a3a9ff"/><path d="m21 10c0-2.761-2.239-5-5-5-2.761 0-5 2.239-5 5v3c0 2.761 2.239 5 5 5 2.761 0 5-2.239 5-5 0-.984 0-2.016 0-3z" fill="#a3a9ff"/><g clip-path="url(#b)"><path d="m15.835 16h-2.835v-2c.968 0 1.936.011 2.904-.001.175-.007.348-.024.519-.058.388-.077.76-.232 1.089-.451.169-.112.322-.242.467-.383l.814-.814c.471.471.943.943 1.414 1.414l-.822.823c-.088.085-.087.084-.177.167-.248.22-.51.419-.794.589-.564.337-1.193.562-1.842.659-.245.036-.49.052-.737.055zm-.691-3.947-1.788.894-1.75-3.5 1.788-.894c.584 1.166 1.167 2.333 1.75 3.5zm4-1-1.788.894-1.75-3.5 1.788-.894c.584 1.166 1.167 2.333 1.75 3.5z"/></g></svg>
|
After Width: | Height: | Size: 4.4 KiB |
1
static/img/emoji/mutant/singer.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41421" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m7.043 23.279c-.142-.112-.279-.228-.413-.349-.778-.704-1.414-1.562-1.863-2.512-.32-.677-.545-1.4-.664-2.14-.058-.357-.089-.717-.101-1.079-.014-.766-.006-1.532-.001-2.298.015-.854.157-1.699.435-2.506.384-1.114 1.015-2.138 1.837-2.981.846-.867 1.889-1.537 3.03-1.946.835-.299 1.712-.451 2.598-.467.099-.001.099-.001.198 0 .886.016 1.763.168 2.598.467 1.141.409 2.184 1.078 3.03 1.946.822.843 1.453 1.867 1.837 2.981.226.657.362 1.34.414 2.032.402-.178.828-.303 1.263-.37.209-.032.419-.047.631-.056.129-.001.128-.001.256 0 .212.009.422.024.631.056.528.081 1.043.248 1.518.491.381.195.734.439 1.051.722l4.672 1.168v5.124l-1 .25v10.188h-6v-8.101c-.329.067-.664.101-1 .101-.667 0-1.332-.134-1.947-.394-.555-.235-1.066-.571-1.503-.987-.153-.146-.297-.302-.43-.466-.348.413-.738.79-1.162 1.125.316.092.624.206.924.341.564.255 1.094.586 1.572.98 1.089.899 1.894 2.126 2.28 3.486.177.622.262 1.263.266 1.909v2.006h-20c0-.725-.012-1.451.002-2.176.023-.746.156-1.482.408-2.186.172-.482.399-.945.672-1.379.829-1.312 2.094-2.326 3.556-2.849.134-.048.269-.092.405-.131z"/><path d="m15.854 25.073c2.355.405 4.146 2.457 4.146 4.927h-16c0-2.47 1.791-4.522 4.146-4.927.469 1.687 7.239 1.687 7.708 0z" fill="#999"/><path d="m8.146 25.073c.277-.048.563-.073.854-.073h6c.291 0 .577.025.854.073-.469 1.687-2.018 2.927-3.854 2.927s-3.385-1.24-3.854-2.927z" fill="#a3a9ff"/><path d="m17.126 20.118c-.247.406-.542.784-.883 1.125-1.126 1.125-2.652 1.757-4.243 1.757-1.591 0-3.117-.632-4.243-1.757-1.125-1.126-1.757-2.652-1.757-4.243 0-.663 0-1.337 0-2 0-1.591.632-3.117 1.757-4.243 1.126-1.125 2.652-1.757 4.243-1.757 1.591 0 3.117.632 4.243 1.757 1.125 1.126 1.757 2.652 1.757 4.243v1.002c-.195.259-.901 3.997-.874 4.116z" fill="#a3a9ff"/><path d="m18 16.002v.998c0 1.109-.307 2.186-.874 3.118-.027-.119-.05-.238-.069-.359-.076-.502-.076-1.016 0-1.518.075-.488.223-.965.437-1.41.142-.293.311-.57.506-.829z" fill="#343394"/><path d="m16 19c0-1.105-.895-2-2-2s-2 .895-2 2 .895 2 2 2 2-.895 2-2zm3-4.001c0-.265-.105-.519-.293-.706-.187-.188-.441-.293-.706-.293-.611 0-1.391 0-2.002 0-.265 0-.519.105-.706.293-.188.187-.293.441-.293.706v.002c0 .265.105.519.293.706.187.188.441.293.706.293h2.002c.265 0 .519-.105.706-.293.188-.187.293-.441.293-.706 0-.001 0-.001 0-.002zm-6 0c0-.265-.105-.519-.293-.706-.187-.188-.441-.293-.706-.293-.611 0-1.391 0-2.002 0-.265 0-.519.105-.706.293-.188.187-.293.441-.293.706v.002c0 .265.105.519.293.706.187.188.441.293.706.293h2.002c.265 0 .519-.105.706-.293.188-.187.293-.441.293-.706 0-.001 0-.001 0-.002z"/><path d="m25 19h2v11h-2z" fill="#808080"/><path d="m22 16.5v5l6-1.5v-2z" fill="#333"/><circle cx="22" cy="19" fill="#a5a5a5" r="3"/></g></svg>
|
After Width: | Height: | Size: 2.9 KiB |
1
static/img/emoji/mutant/skull.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41421" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m6 19.991-.024-.022c-.268-.248-.517-.512-.74-.802-.507-.663-.873-1.43-1.069-2.241-.099-.411-.148-.827-.165-1.248-.026-1.936-.013-3.871-.001-5.807.007-.382.031-.763.079-1.142.094-.739.271-1.468.527-2.167.54-1.475 1.432-2.813 2.581-3.883 1.003-.933 2.196-1.658 3.489-2.113.704-.248 1.436-.416 2.177-.501.338-.039.677-.058 1.017-.064 1.419-.009 2.839-.009 4.258 0 .34.006.679.025 1.017.064.741.085 1.473.253 2.177.501 1.293.455 2.486 1.18 3.489 2.113 1.149 1.07 2.041 2.408 2.581 3.883.256.699.433 1.428.527 2.167.048.379.072.76.079 1.142.012 1.887.001 3.774.001 5.661-.005.365-.035.728-.102 1.087-.153.82-.478 1.606-.95 2.294-.239.348-.515.663-.817.957-.044.041-.087.081-.131.12v6.01h-.028c-.001.01-.003.019-.004.029-.065.435-.227.855-.472 1.222-.105.158-.226.301-.357.439-1.07 1.069-2.127 2.152-3.21 3.208-.145.134-.295.261-.457.375-.427.3-.912.515-1.421.629-.257.058-.517.087-.78.097-2.181.027-4.361.027-6.542 0-.263-.01-.523-.039-.78-.097-.509-.114-.994-.329-1.421-.629-.162-.114-.312-.241-.457-.375-1.083-1.056-2.14-2.139-3.21-3.208-.131-.138-.252-.281-.357-.439-.245-.367-.407-.787-.472-1.222-.001-.01-.003-.019-.004-.029h-.028z"/><path d="m6 10c0-4.418 3.582-8 8-8h4c4.418 0 8 3.582 8 8v5.519c0 1.134-.481 2.214-1.324 2.973-.179.16-.36.324-.535.481-.735.661-1.688 1.027-2.676 1.027-2.693 0-8.237 0-10.93 0-.988 0-1.941-.366-2.676-1.027-.175-.157-.356-.321-.535-.481-.843-.759-1.324-1.839-1.324-2.973 0-1.394 0-3.439 0-5.519z" fill="#d9d9d9"/><path d="m20 23h-2l-.5-.5-.5.5h-2l-.5-.5-.5.5h-2v-4h8z" fill="#d9d9d9"/><path d="m14 20h1v3h-1z" fill="#5b5b5b"/><path d="m17 20h1v3h-1z" fill="#5b5b5b"/><path d="m8 21v4.586c0 .265.105.519.293.707.656.656 2.253 2.253 3.121 3.121.375.375.884.586 1.414.586h6.344c.53 0 1.039-.211 1.414-.586l3.121-3.121c.188-.188.293-.442.293-.707 0-1.199 0-4.586 0-4.586h-1v4l-4 2h-6l-4-2v-4z" fill="#d9d9d9"/><path d="m20 25h-2l-.5.5-.5-.5h-2l-.5.5-.5-.5h-2v3h8z" fill="#d9d9d9"/><path d="m14 25h1v3h-1z" fill="#5b5b5b"/><path d="m17 25h1v3h-1z" fill="#5b5b5b"/><path d="m8 14c0-1.657 1.343-3 3-3h1c1.105 0 2 .895 2 2v1c0 1.657-1.343 3-3 3-.339 0-.678 0-1 0-1.105 0-2-.895-2-2 0-.322 0-.661 0-1z"/><path d="m18 13c0-1.105.895-2 2-2h1c1.657 0 3 1.343 3 3v1c0 1.105-.895 2-2 2-.322 0-.661 0-1 0-1.657 0-3-1.343-3-3 0-.339 0-.678 0-1z"/><path d="m14 18 2-2 2 2v1h-4z"/></g></svg>
|
After Width: | Height: | Size: 2.6 KiB |
1
static/img/emoji/mutant/skull_and_crossbones.svg
Normal file
After Width: | Height: | Size: 5.0 KiB |
1
static/img/emoji/mutant/softball.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m28.327 8.65c-.841-2.314-2.663-4.136-4.977-4.977-.507-.185-1.038-.378-1.572-.572-3.732-1.357-7.824-1.357-11.556 0-.534.194-1.065.387-1.572.572-2.314.841-4.136 2.663-4.977 4.977-.185.507-.378 1.038-.572 1.572-1.357 3.732-1.357 7.824 0 11.556.194.534.387 1.065.572 1.572.841 2.314 2.663 4.136 4.977 4.977.507.185 1.038.378 1.572.572 3.732 1.357 7.824 1.357 11.556 0 .534-.194 1.065-.387 1.572-.572 2.314-.841 4.136-2.663 4.977-4.977.185-.507.378-1.038.572-1.572 1.357-3.732 1.357-7.824 0-11.556-.194-.534-.387-1.065-.572-1.572z"/></clipPath><path d="m0 0v32h32v-32z" fill="none"/><path d="m28.327 8.65c-.841-2.314-2.663-4.136-4.977-4.977-.507-.185-1.038-.378-1.572-.572-3.732-1.357-7.824-1.357-11.556 0-.534.194-1.065.387-1.572.572-2.314.841-4.136 2.663-4.977 4.977-.185.507-.378 1.038-.572 1.572-1.357 3.732-1.357 7.824 0 11.556.194.534.387 1.065.572 1.572.841 2.314 2.663 4.136 4.977 4.977.507.185 1.038.378 1.572.572 3.732 1.357 7.824 1.357 11.556 0 .534-.194 1.065-.387 1.572-.572 2.314-.841 4.136-2.663 4.977-4.977.185-.507.378-1.038.572-1.572 1.357-3.732 1.357-7.824 0-11.556-.194-.534-.387-1.065-.572-1.572z" fill="none" stroke="#000" stroke-width="4"/><path d="m28.327 8.65c-.841-2.314-2.663-4.136-4.977-4.977-.507-.185-1.038-.378-1.572-.572-3.732-1.357-7.824-1.357-11.556 0-.534.194-1.065.387-1.572.572-2.314.841-4.136 2.663-4.977 4.977-.185.507-.378 1.038-.572 1.572-1.357 3.732-1.357 7.824 0 11.556.194.534.387 1.065.572 1.572.841 2.314 2.663 4.136 4.977 4.977.507.185 1.038.378 1.572.572 3.732 1.357 7.824 1.357 11.556 0 .534-.194 1.065-.387 1.572-.572 2.314-.841 4.136-2.663 4.977-4.977.185-.507.378-1.038.572-1.572 1.357-3.732 1.357-7.824 0-11.556-.194-.534-.387-1.065-.572-1.572z" fill="#e2f10a"/><g clip-path="url(#a)"><path d="m.76.712c4.967-4.968 11.795-6.205 15.238-2.763 3.443 3.443 2.205 10.271-2.762 15.238-4.967 4.968-11.795 6.205-15.238 2.762-3.443-3.442-2.205-10.27 2.762-15.237z" fill="#fff" fill-opacity=".466667"/><g fill="none" stroke="#ff5757" stroke-width="3"><ellipse cx="27.5" cy="16" rx="7.5" ry="10.778"/><ellipse cx="4.5" cy="16" rx="7.5" ry="10.778"/></g></g></svg>
|
After Width: | Height: | Size: 2.3 KiB |
1
static/img/emoji/mutant/student.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41421" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m9.06 11.021-4.834-3.021 11.774-7.358c3.925 2.452 7.849 4.905 11.774 7.358l-4.834 3.021c.234.409.433.838.592 1.281.198.554.335 1.129.407 1.712.037.294.055.59.06.887.005.732.005 1.466 0 2.198-.006.363-.033.724-.087 1.082-.11.742-.326 1.467-.638 2.149-.437.954-1.062 1.819-1.831 2.533-.156.145-.318.283-.485.415.315.092.624.206.924.341.564.255 1.094.586 1.572.98 1.089.899 1.894 2.126 2.28 3.486.177.622.262 1.263.266 1.909v2.006h-20c0-.725-.012-1.451.002-2.176.023-.746.156-1.482.408-2.186.172-.482.399-.945.672-1.379.829-1.312 2.094-2.326 3.556-2.849.134-.048.269-.092.405-.131-.504-.398-.96-.856-1.354-1.363-.461-.591-.838-1.248-1.117-1.945-.242-.605-.41-1.241-.498-1.887-.045-.327-.067-.655-.073-.985-.005-.732-.005-1.466 0-2.198.015-.854.157-1.699.435-2.506.164-.477.374-.937.624-1.374z"/><path d="m19.854 25.073c2.355.405 4.146 2.457 4.146 4.927h-16c0-2.47 1.791-4.522 4.146-4.927.469 1.687 7.239 1.687 7.708 0z" fill="#333"/><path d="m12.146 25.073c.277-.048.563-.073.854-.073h6c.291 0 .577.025.854.073-.469 1.687-2.018 2.927-3.854 2.927s-3.385-1.24-3.854-2.927z" fill="#a3a9ff"/><path d="m21.657 13c.225.636.343 1.312.343 2v2c0 1.591-.632 3.117-1.757 4.243-1.126 1.125-2.652 1.757-4.243 1.757-1.591 0-3.117-.632-4.243-1.757-1.125-1.126-1.757-2.652-1.757-4.243 0-.663 0-1.337 0-2 0-.688.118-1.364.343-2z" fill="#a3a9ff"/><path d="m10.269 9.418-2.269-1.418 8-5 8 5-2.269 1.418z" fill="#333"/><path d="m10.269 9.418c.847-.869 1.891-1.54 3.034-1.95.835-.299 1.712-.451 2.598-.467.099-.001.099-.001.198 0 .854.015 1.699.157 2.506.435 1.145.395 2.196 1.051 3.052 1.907.025.025.049.05.074.075l-5.498 3.436c-.152.003-.303.005-.455.007z" fill="#1e1e1e"/><path d="m10.343 13c.296-.836.776-1.604 1.414-2.243 1.126-1.125 2.652-1.757 4.243-1.757 1.591 0 3.117.632 4.243 1.757.638.639 1.118 1.407 1.414 2.243z" fill="#333"/><path d="m20 15c0-.552-.448-1-1-1s-1 .448-1 1v1c0 .552.448 1 1 1s1-.448 1-1c0-.322 0-.678 0-1zm-6 0c0-.552-.448-1-1-1s-1 .448-1 1v1c0 .552.448 1 1 1s1-.448 1-1c0-.322 0-.678 0-1z"/><path d="m9 12h14v2h-14z"/><path d="m13 4.875v5.625c0 .265-.105.52-.293.707-.187.188-.442.293-.707.293s-.52-.105-.707-.293c-.188-.187-.293-.442-.293-.707v-4.375z" fill="#b89d43"/></g></svg>
|
After Width: | Height: | Size: 2.5 KiB |
1
static/img/emoji/mutant/studio_microphone.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="3" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0v32h32v-32z"/></clipPath><path d="m0 0v32h32v-32z" fill="none"/><g clip-path="url(#a)"><path d="m7.394 15.814c-3.091-.726-5.394-3.503-5.394-6.814 0-3.863 3.137-7 7-7 3.311 0 6.088 2.303 6.815 5.394l13.851 18.274c.654.719.321 2.153-.762 3.236-1.082 1.082-2.514 1.415-3.234.764z" fill="none" stroke="#000" stroke-width="4"/><path d="m8.6 10.4 3.4.6 16 15 1.271 2.487c-.11.143-.233.283-.367.417-1.082 1.082-2.514 1.415-3.234.764l-20.67-15.668z" fill="#737373"/><path d="m8.6 10.4 5.4-5.4 15.666 20.668c.573.63.388 1.809-.395 2.819z" fill="#808080"/><circle cx="9" cy="9" fill="#313131" r="7"/><path d="m15.354 17.354c-.094-.094-.147-.221-.147-.354s.053-.26.147-.354l1.292-1.292c.094-.094.221-.147.354-.147s.26.053.354.147c.577.577 1.715 1.715 2.292 2.292.094.094.147.221.147.354s-.053.26-.147.354c-.364.364-.928.928-1.292 1.292-.094.094-.221.147-.354.147s-.26-.053-.354-.147c-.577-.577-1.715-1.715-2.292-2.292z" fill="#212121"/></g></svg>
|
After Width: | Height: | Size: 1.2 KiB |
1
static/img/emoji/mutant/technologist.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41421" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m22 14c0-1.591-.632-3.117-1.757-4.243-1.126-1.125-2.652-1.757-4.243-1.757-1.591 0-3.117.632-4.243 1.757-1.125 1.126-1.757 2.652-1.757 4.243v2c0 1.591.632 3.117 1.757 4.243 1.126 1.125 2.652 1.757 4.243 1.757 1.591 0 3.117-.632 4.243-1.757 1.125-1.126 1.757-2.652 1.757-4.243 0-.663 0-1.337 0-2z"/></clipPath><clipPath id="c"><path clip-rule="evenodd" d="m25 20c0-1.105-.895-2-2-2-3.463 0-10.537 0-14 0-1.105 0-2 .895-2 2v10h18s0-6.586 0-10z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><path d="m16.099 6.001c.854.015 1.699.157 2.506.435 1.177.405 2.253 1.087 3.122 1.978.799.82 1.419 1.811 1.805 2.889.209.584.35 1.192.419 1.808.029.263.043.526.048.79.005.733.005 1.465 0 2.198-.006.33-.028.658-.073.985-.106.775-.326 1.534-.652 2.246-.437.954-1.062 1.819-1.831 2.533-.719.668-1.561 1.201-2.472 1.565-.85.34-1.758.532-2.673.566-1.672.063-3.345-.41-4.736-1.338-.712-.475-1.347-1.064-1.873-1.74-.461-.592-.838-1.248-1.117-1.945-.242-.606-.41-1.241-.498-1.887-.045-.327-.067-.655-.073-.985-.005-.733-.005-1.465 0-2.198.005-.264.019-.527.048-.79.069-.616.21-1.224.419-1.808.42-1.172 1.115-2.24 2.017-3.099.806-.766 1.771-1.361 2.818-1.736.835-.299 1.712-.451 2.598-.467.099-.001.099-.001.198 0z" fill-rule="nonzero"/><path d="m22 14c0-1.591-.632-3.117-1.757-4.243-1.126-1.125-2.652-1.757-4.243-1.757-1.591 0-3.117.632-4.243 1.757-1.125 1.126-1.757 2.652-1.757 4.243v2c0 1.591.632 3.117 1.757 4.243 1.126 1.125 2.652 1.757 4.243 1.757 1.591 0 3.117-.632 4.243-1.757 1.125-1.126 1.757-2.652 1.757-4.243 0-.663 0-1.337 0-2z" fill="#a3a9ff"/><g clip-path="url(#b)"><path d="m9 14h14v6h-14z" fill="#fff" fill-opacity=".266667"/><path d="m20 14c0-.552-.448-1-1-1s-1 .448-1 1v1c0 .552.448 1 1 1s1-.448 1-1c0-.322 0-.678 0-1zm-6 0c0-.552-.448-1-1-1s-1 .448-1 1v1c0 .552.448 1 1 1s1-.448 1-1c0-.322 0-.678 0-1z"/></g><path d="m23.102 16.001c.136.005.27.014.405.031.329.042.652.124.96.246.539.212 1.029.543 1.429.962.4.42.707.927.894 1.477.138.411.205.838.21 1.27v12.013h-22c0-4.034-.049-8.069.001-12.103.005-.135.014-.27.031-.404.042-.329.125-.652.246-.96.416-1.055 1.282-1.9 2.347-2.29.41-.15.837-.225 1.273-.242 4.734-.059 9.47-.059 14.204 0z" fill-rule="nonzero"/><path d="m25 20c0-1.105-.895-2-2-2-3.463 0-10.537 0-14 0-1.105 0-2 .895-2 2v10h18s0-6.586 0-10z" fill="#252525"/><g clip-path="url(#c)"><path d="m5 27h22v2h-22z"/></g><g fill-rule="nonzero"><path d="m19 20.332v4.668h-2v-1.586l-.586.586h-.828l-.586-.586v1.586h-2v-4.668l1.235-.512 1.765 1.766 1.765-1.766c.412.171.823.341 1.235.512z" fill="#656565"/><path d="m29.048 28.001c.111.008.219.029.324.071.267.107.479.329.573.601.037.106.052.215.055.327v1h2v2c-1.016 0-2.032.023-3.048-.001-.047-.004-.047-.004-.094-.009-.095-.016-.186-.04-.273-.08-.247-.113-.441-.326-.53-.583-.037-.106-.052-.215-.055-.327v-1h-2v-2c1.016 0 2.032-.023 3.048.001z"/></g></g></svg>
|
After Width: | Height: | Size: 3.1 KiB |
1
static/img/emoji/mutant/tennis.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m30 16c0 7.727-6.273 14-14 14s-14-6.273-14-14 6.273-14 14-14 14 6.273 14 14z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><circle cx="16" cy="16" r="16"/><path d="m30 16c0 7.727-6.273 14-14 14s-14-6.273-14-14 6.273-14 14-14 14 6.273 14 14z" fill="#e2f10a"/><g clip-path="url(#b)"><path d="m26 1s-.179 12-10 12-10-12-10-12" fill="none" stroke="#fff" stroke-width="3"/><path d="m26 31s-.179-12-10-12-10 12-10 12" fill="none" stroke="#fff" stroke-width="3"/><path d="m.76.712c4.967-4.968 11.795-6.205 15.238-2.763 3.443 3.443 2.205 10.271-2.762 15.238-4.967 4.968-11.795 6.205-15.238 2.762-3.443-3.442-2.205-10.27 2.762-15.237z" fill="#fff" fill-opacity=".466667"/></g></g></svg>
|
After Width: | Height: | Size: 1.0 KiB |
1
static/img/emoji/mutant/volleyball.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m0 0h32v32h-32z"/></clipPath><clipPath id="b"><path clip-rule="evenodd" d="m30 16c0 7.727-6.273 14-14 14s-14-6.273-14-14 6.273-14 14-14 14 6.273 14 14z"/></clipPath><path d="m0 0h32v32h-32z" fill="none"/><g clip-path="url(#a)"><circle cx="16" cy="16" r="16"/><path d="m30 16c0 7.727-6.273 14-14 14s-14-6.273-14-14 6.273-14 14-14 14 6.273 14 14z" fill="#f3f3f3"/><g clip-path="url(#b)"><path d="m4.378 4.378c5.02-5.019 11.229-6.96 13.858-4.331 2.63 2.629.689 8.839-4.331 13.858-5.019 5.02-11.229 6.961-13.858 4.331-2.629-2.629-.688-8.838 4.331-13.858z" fill="#fff"/><g fill="none" stroke="#ccc" stroke-width="2"><path d="m16 16s.353.084.928.219c5.788 1.369 11.88-.165 16.33-4.111"/><path d="m21.605 16.293s-.011-.363-.029-.953c-.176-5.946-3.234-11.433-8.198-14.71"/><path d="m27.345 15.305s-.01-.363-.028-.953c-.176-5.945-3.235-11.433-8.198-14.71"/><path d="m16 16s-.249.264-.654.694c-4.079 4.329-5.797 10.371-4.604 16.198"/><path d="m12.944 20.707s.32.172.84.452c5.237 2.82 11.518 2.915 16.838.255"/><path d="m10.929 26.173s.32.172.84.452c5.237 2.82 11.518 2.915 16.838.255"/><path d="m16 16s-.104-.348-.274-.913c-1.709-5.697-6.083-10.206-11.726-12.087"/><path d="m13.451 11s-.309.191-.811.501c-5.061 3.125-8.284 8.518-8.64 14.455"/><path d="m9.726 6.522s-.309.191-.812.501c-5.06 3.125-8.283 8.518-8.64 14.455"/></g></g></g></svg>
|
After Width: | Height: | Size: 1.6 KiB |
4
static/static.go
vendored
@ -51,12 +51,12 @@ func GetWebIndexTemplate() (*template.Template, error) {
|
||||
return tmpl, err
|
||||
}
|
||||
|
||||
//go:embed offline.ts
|
||||
//go:embed offline.tsclip
|
||||
var offlineVideoSegment []byte
|
||||
|
||||
// GetOfflineSegment will return the offline video segment data.
|
||||
func GetOfflineSegment() []byte {
|
||||
return getFileSystemStaticFileOrDefault("offline.ts", offlineVideoSegment)
|
||||
return getFileSystemStaticFileOrDefault("offline.tsclip", offlineVideoSegment)
|
||||
}
|
||||
|
||||
//go:embed img/logo.png
|
||||
|
7
static/web/_next/static/chunks/1323-05d94b99ccc36801.js
Normal file
2
static/web/_next/static/chunks/1390.5ff4964a1f1a6baa.js
Normal file
@ -1,2 +1,2 @@
|
||||
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1559],{51559:function(e,t,r){r.r(t),r.d(t,{EmojiPicker:function(){return s}});var n=r(85893),c=r(67294),o=r(57741);let s=e=>{let{onEmojiSelect:t,onCustomEmojiSelect:r}=e,[s,a]=(0,c.useState)([]),u=(0,c.useRef)(),i=async()=>{try{let e=await fetch("/api/emoji"),t=await e.json();a(t)}catch(r){console.error("cannot fetch custom emoji",r)}};return(0,c.useEffect)(()=>{i()},[]),(0,c.useEffect)(()=>{let e=s.map(e=>({emoji:e.name,label:e.name,url:e.url})),n=(0,o.wU)({rootElement:u.current,custom:e,initialCategory:"custom",showPreview:!1,showRecents:!0});n.addEventListener("emoji:select",e=>{e.url?r(e.name,e.url):t(e.emoji)})},[s]),(0,n.jsx)("div",{ref:u})}}}]);
|
||||
//# sourceMappingURL=1559.2e58e7c39b343623.js.map
|
||||
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1559],{51559:function(e,t,r){r.r(t),r.d(t,{EmojiPicker:function(){return s}});var n=r(85893),c=r(67294),o=r(57741);let s=e=>{let{onEmojiSelect:t,onCustomEmojiSelect:r}=e,[s,a]=(0,c.useState)([]),u=(0,c.useRef)(),i=async()=>{try{let e=await fetch("/api/emoji"),t=await e.json();a(t)}catch(e){console.error("cannot fetch custom emoji",e)}};return(0,c.useEffect)(()=>{i()},[]),(0,c.useEffect)(()=>{let e=s.map(e=>({emoji:e.name,label:e.name,url:e.url})),n=(0,o.wU)({rootElement:u.current,custom:e,initialCategory:"custom",showPreview:!1,showRecents:!0});n.addEventListener("emoji:select",e=>{e.url?r(e.name,e.url):t(e.emoji)})},[s]),(0,n.jsx)("div",{ref:u})}}}]);
|
||||
//# sourceMappingURL=1559.6f5bd14ccd571646.js.map
|
@ -1 +1 @@
|
||||
{"version":3,"file":"static/chunks/1559.2e58e7c39b343623.js","mappings":"yLASO,IAAMA,EAAoC,GAA4C,IAA3C,CAAEC,cAAAA,CAAAA,CAAeC,oBAAAA,CAAAA,CAAqB,CAAAC,EAChF,CAACC,EAAaC,EAAe,CAAGC,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,EAAE,EAC3CC,EAAMC,CAAAA,EAAAA,EAAAA,MAAAA,IAENC,EAAiB,SAAY,CACjC,GAAI,CACF,IAAMC,EAAW,MAAMC,MAZJ,cAabC,EAAQ,MAAMF,EAASG,IAAI,GACjCR,EAAeO,EACjB,CAAE,MAAOE,EAAG,CACVC,QAAQC,KAAK,CAAC,4BAA6BF,EAC7C,CACF,EA+BA,MA5BAG,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,IAAM,CACdR,GACF,EAAG,EAAE,EAGLQ,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,IAAM,CACd,IAAMH,EAAIV,EAAYc,GAAG,CAACN,GAAU,EAClCA,MAAOA,EAAMO,IAAI,CACjBC,MAAOR,EAAMO,IAAI,CACjBE,IAAKT,EAAMS,GAAG,CAChB,GAEMC,EAASC,CAAAA,EAAAA,EAAAA,EAAAA,EAAa,CAC1BC,YAAajB,EAAIkB,OAAO,CACxBC,OAAQZ,EACRa,gBAAiB,SACjBC,YAAa,GACbC,YAAa,EACf,GACAP,EAAOQ,gBAAgB,CAAC,eAAgBC,GAAS,CAC3CA,EAAMV,GAAG,CACXnB,EAAoB6B,EAAMZ,IAAI,CAAEY,EAAMV,GAAG,EAEzCpB,EAAc8B,EAAMnB,KAAK,CAE7B,EACF,EAAG,CAACR,EAAY,EAET,GAAA4B,EAAAC,GAAA,EAACC,MAAAA,CAAI3B,IAAKA,GACnB","sources":["webpack://_N_E/./components/chat/ChatTextField/EmojiPicker.tsx","webpack://_N_E/<anon>"],"sourcesContent":["import React, { FC, useEffect, useRef, useState } from 'react';\nimport { createPicker } from 'picmo';\n\nconst CUSTOM_EMOJI_URL = '/api/emoji';\nexport type EmojiPickerProps = {\n onEmojiSelect: (emoji: string) => void;\n onCustomEmojiSelect: (name: string, url: string) => void;\n};\n\nexport const EmojiPicker: FC<EmojiPickerProps> = ({ onEmojiSelect, onCustomEmojiSelect }) => {\n const [customEmoji, setCustomEmoji] = useState([]);\n const ref = useRef();\n\n const getCustomEmoji = async () => {\n try {\n const response = await fetch(CUSTOM_EMOJI_URL);\n const emoji = await response.json();\n setCustomEmoji(emoji);\n } catch (e) {\n console.error('cannot fetch custom emoji', e);\n }\n };\n\n // Fetch the custom emoji on component mount.\n useEffect(() => {\n getCustomEmoji();\n }, []);\n\n // Recreate the emoji picker when the custom emoji changes.\n useEffect(() => {\n const e = customEmoji.map(emoji => ({\n emoji: emoji.name,\n label: emoji.name,\n url: emoji.url,\n }));\n\n const picker = createPicker({\n rootElement: ref.current,\n custom: e,\n initialCategory: 'custom',\n showPreview: false,\n showRecents: true,\n });\n picker.addEventListener('emoji:select', event => {\n if (event.url) {\n onCustomEmojiSelect(event.name, event.url);\n } else {\n onEmojiSelect(event.emoji);\n }\n });\n }, [customEmoji]);\n\n return <div ref={ref} />;\n};\n"],"names":["EmojiPicker","onEmojiSelect","onCustomEmojiSelect","param","customEmoji","setCustomEmoji","useState","ref","useRef","getCustomEmoji","response","fetch","emoji","json","e","console","error","useEffect","map","name","label","url","picker","createPicker","rootElement","current","custom","initialCategory","showPreview","showRecents","addEventListener","event","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","div"],"sourceRoot":""}
|
||||
{"version":3,"file":"static/chunks/1559.6f5bd14ccd571646.js","mappings":"yLASO,IAAMA,EAAoC,GAA4C,IAA3C,CAAEC,cAAAA,CAAAA,CAAeC,oBAAAA,CAAAA,CAAqB,CAAAC,EAChF,CAACC,EAAaC,EAAe,CAAGC,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,EAAE,EAC3CC,EAAMC,CAAAA,EAAAA,EAAAA,MAAAA,IAENC,EAAiB,SAAY,CACjC,GAAI,CACF,IAAMC,EAAW,MAAMC,MAZJ,cAabC,EAAQ,MAAMF,EAASG,IAAI,GACjCR,EAAeO,EACjB,CAAE,MAAOE,EAAG,CACVC,QAAQC,KAAK,CAAC,4BAA6BF,EAC7C,CACF,EA+BA,MA5BAG,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,IAAM,CACdR,GACF,EAAG,EAAE,EAGLQ,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,IAAM,CACd,IAAMH,EAAIV,EAAYc,GAAG,CAACN,GAAU,EAClCA,MAAOA,EAAMO,IAAI,CACjBC,MAAOR,EAAMO,IAAI,CACjBE,IAAKT,EAAMS,GAAG,CAChB,GAEMC,EAASC,CAAAA,EAAAA,EAAAA,EAAAA,EAAa,CAC1BC,YAAajB,EAAIkB,OAAO,CACxBC,OAAQZ,EACRa,gBAAiB,SACjBC,YAAa,GACbC,YAAa,EACf,GACAP,EAAOQ,gBAAgB,CAAC,eAAgBC,GAAS,CAC3CA,EAAMV,GAAG,CACXnB,EAAoB6B,EAAMZ,IAAI,CAAEY,EAAMV,GAAG,EAEzCpB,EAAc8B,EAAMnB,KAAK,CAE7B,EACF,EAAG,CAACR,EAAY,EAET,GAAA4B,EAAAC,GAAA,EAACC,MAAAA,CAAI3B,IAAKA,GACnB","sources":["webpack://_N_E/./components/chat/ChatTextField/EmojiPicker.tsx","webpack://_N_E/<anon>"],"sourcesContent":["import React, { FC, useEffect, useRef, useState } from 'react';\nimport { createPicker } from 'picmo';\n\nconst CUSTOM_EMOJI_URL = '/api/emoji';\nexport type EmojiPickerProps = {\n onEmojiSelect: (emoji: string) => void;\n onCustomEmojiSelect: (name: string, url: string) => void;\n};\n\nexport const EmojiPicker: FC<EmojiPickerProps> = ({ onEmojiSelect, onCustomEmojiSelect }) => {\n const [customEmoji, setCustomEmoji] = useState([]);\n const ref = useRef();\n\n const getCustomEmoji = async () => {\n try {\n const response = await fetch(CUSTOM_EMOJI_URL);\n const emoji = await response.json();\n setCustomEmoji(emoji);\n } catch (e) {\n console.error('cannot fetch custom emoji', e);\n }\n };\n\n // Fetch the custom emoji on component mount.\n useEffect(() => {\n getCustomEmoji();\n }, []);\n\n // Recreate the emoji picker when the custom emoji changes.\n useEffect(() => {\n const e = customEmoji.map(emoji => ({\n emoji: emoji.name,\n label: emoji.name,\n url: emoji.url,\n }));\n\n const picker = createPicker({\n rootElement: ref.current,\n custom: e,\n initialCategory: 'custom',\n showPreview: false,\n showRecents: true,\n });\n picker.addEventListener('emoji:select', event => {\n if (event.url) {\n onCustomEmojiSelect(event.name, event.url);\n } else {\n onEmojiSelect(event.emoji);\n }\n });\n }, [customEmoji]);\n\n return <div ref={ref} />;\n};\n"],"names":["EmojiPicker","onEmojiSelect","onCustomEmojiSelect","param","customEmoji","setCustomEmoji","useState","ref","useRef","getCustomEmoji","response","fetch","emoji","json","e","console","error","useEffect","map","name","label","url","picker","createPicker","rootElement","current","custom","initialCategory","showPreview","showRecents","addEventListener","event","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","div"],"sourceRoot":""}
|