refactor icons

This commit is contained in:
2024-06-26 16:32:59 +00:00
parent 027dd332e1
commit afa36e9f08
32 changed files with 128 additions and 460 deletions

22
package-lock.json generated
View File

@@ -29,6 +29,7 @@
"vue-router": "^4.3.3"
},
"devDependencies": {
"@iconify/vue": "^4.1.2",
"@types/node": "^20.14.2",
"@vitejs/plugin-legacy": "^5.4.1",
"@vitejs/plugin-vue": "^5.0.5",
@@ -2288,6 +2289,27 @@
"node": ">=12"
}
},
"node_modules/@iconify/types": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
"integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
"dev": true
},
"node_modules/@iconify/vue": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/@iconify/vue/-/vue-4.1.2.tgz",
"integrity": "sha512-CQnYqLiQD5LOAaXhBrmj1mdL2/NCJvwcC4jtW2Z8ukhThiFkLDkutarTOV2trfc9EXqUqRs0KqXOL9pZ/IyysA==",
"dev": true,
"dependencies": {
"@iconify/types": "^2.0.0"
},
"funding": {
"url": "https://github.com/sponsors/cyberalien"
},
"peerDependencies": {
"vue": ">=3"
}
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.1.1",
"resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",

View File

@@ -30,6 +30,7 @@
"vue-router": "^4.3.3"
},
"devDependencies": {
"@iconify/vue": "^4.1.2",
"@types/node": "^20.14.2",
"@vitejs/plugin-legacy": "^5.4.1",
"@vitejs/plugin-vue": "^5.0.5",

View File

@@ -6,6 +6,7 @@ import { Announcement } from "~/utils/types"
import { isDesktop } from "~/shared/composables/breakpoints"
import { NTag } from "naive-ui"
import TitleWithTag from "./components/TitleWithTag.vue"
import { Icon } from "@iconify/vue"
const total = ref(0)
const content = ref("")
@@ -25,7 +26,7 @@ const columns: DataTableColumn<Announcement>[] = [
{
key: "tag",
title: "标签",
render: (row) => h(NTag, row.tag || "公告"),
render: (row) => h(NTag, () => row.tag || "公告"),
},
{
key: "create_time",

View File

@@ -2,7 +2,7 @@
import { parseTime } from "utils/functions"
import { useContestStore } from "oj/store/contest"
import ContestType from "~/shared/components/ContestType.vue"
import Info from "~/shared/icons/Info.vue"
import { Icon } from "@iconify/vue"
const contestStore = useContestStore()
</script>
@@ -16,7 +16,7 @@ const contestStore = useContestStore()
<template #trigger>
<n-button>
<template #icon>
<Info />
<Icon icon="openmoji:compass"></Icon>
</template>
比赛信息
</n-button>

View File

@@ -4,7 +4,7 @@ import { isDesktop } from "~/shared/composables/breakpoints"
import { useContestStore } from "../store/contest"
import ContestInfo from "./components/ContestInfo.vue"
import ContestMenu from "./components/ContestMenu.vue"
import Lock from "~/shared/icons/Lock.vue"
import { Icon } from "@iconify/vue"
const props = defineProps<{
contestID: string
@@ -33,10 +33,13 @@ const passwordFormVisible = computed(
<n-space vertical size="large" v-if="contestStore.contest">
<n-space align="center" justify="space-between">
<n-space align="center">
<Icon
v-if="contestStore.isPrivate"
icon="openmoji:locked"
:width="30"
:height="30"
></Icon>
<h2 class="contestTitle">{{ contestStore.contest.title }}</h2>
<n-icon size="large" v-if="contestStore.isPrivate" class="lockIcon">
<Lock />
</n-icon>
<n-tag
size="small"
:type="CONTEST_STATUS[contestStore.contestStatus]['type']"
@@ -79,7 +82,4 @@ const passwordFormVisible = computed(
font-weight: 500;
margin: 0;
}
.lockIcon {
transform: translateY(2px);
}
</style>

View File

@@ -7,7 +7,7 @@ import { ContestRank, ProblemFiltered } from "~/utils/types"
import { secondsToDuration } from "utils/functions"
import { ContestStatus } from "~/utils/constants"
import { useContestStore } from "~/oj/store/contest"
import Medal1 from "~/shared/icons/Medal1.vue"
import { Icon } from "@iconify/vue"
interface Props {
contestID: string
@@ -132,22 +132,25 @@ async function addColumns() {
}
if (status.is_first_ac) {
acTime = [
h(
NIcon,
{ size: 16, style: "transform: translate(-2px, 2px)" },
() => h(Medal1),
),
secondsToDuration(status.ac_time),
h(Icon, {
icon: "openmoji:1st-place-medal",
height: 24,
width: 24,
}),
h("span", secondsToDuration(status.ac_time)),
]
}
if (status.error_number) {
errorNumber = h(
"p",
"span",
{ style: "margin: 0" },
`(-${status.error_number})`,
)
}
return h("div", [acTime, errorNumber])
return h("div", { class: "oj-time-with-modal" }, [
acTime,
errorNumber,
])
}
},
cellProps: (row) => {
@@ -218,5 +221,8 @@ onMounted(() => {
/>
</n-space>
</template>
<style scoped></style>
<style>
.oj-time-with-modal {
display: flex;
}
</style>

View File

@@ -1,7 +1,6 @@
<script setup lang="ts">
import { useThemeVars } from "naive-ui"
import Select from "~/shared/icons/Select.vue"
import SemiSelect from "~/shared/icons/SemiSelect.vue"
import { Icon } from "@iconify/vue"
const theme = useThemeVars()
const props = defineProps<{
@@ -13,17 +12,12 @@ const color = computed(() => {
if (props.status === "passed") return theme.value.successColor
if (props.status === "failed") return theme.value.errorColor
})
const Icon = computed(() => {
if (props.status === "passed") return Select
if (props.status === "failed") return SemiSelect
return {}
})
</script>
<template>
<n-icon v-if="showIcon" :color="color">
<component :is="Icon"></component>
<Icon icon="ep:select" v-if="status === 'passed'"></Icon>
<Icon icon="ep:semi-select" v-if="status === 'failed'"></Icon>
</n-icon>
</template>

View File

@@ -8,11 +8,9 @@ import { Submission, SubmitCodePayload } from "utils/types"
import { getSubmission, submitCode } from "oj/api"
import SubmissionResultTag from "~/shared/components/SubmissionResultTag.vue"
import { useUserStore } from "~/shared/store/user"
import Loading from "~/shared/icons/Loading.vue"
import Bulb from "~/shared/icons/Bulb.vue"
import Play from "~/shared/icons/Play.vue"
// @ts-ignore
import confetti from "canvas-confetti"
import { Icon } from "@iconify/vue"
const userStore = useUserStore()
const route = useRoute()
@@ -218,9 +216,12 @@ watch(
>
<template #icon>
<n-icon>
<Loading v-if="judging || pending || submitting" />
<Bulb v-else-if="isPending" />
<Play v-else />
<Icon
v-if="judging || pending || submitting"
icon="eos-icons:loading"
></Icon>
<Icon v-else-if="isPending" icon="ph:lightbulb-fill"></Icon>
<Icon v-else icon="ph:play-fill"></Icon>
</n-icon>
</template>
{{ submitLabel }}

View File

@@ -8,8 +8,7 @@ import { useUserStore } from "~/shared/store/user"
import { getProblemTagList } from "~/shared/api"
import Pagination from "~/shared/components/Pagination.vue"
import { isDesktop } from "~/shared/composables/breakpoints"
import ArrowUp from "~/shared/icons/ArrowUp.vue"
import ArrowDown from "~/shared/icons/ArrowDown.vue"
import { Icon } from "@iconify/vue"
interface Tag {
id: number
@@ -222,10 +221,8 @@ function rowProps(row: ProblemFiltered) {
</n-form>
<n-button @click="toggleShowTag()" quaternary icon-placement="right">
<template #icon>
<n-icon>
<ArrowDown v-if="showTag" />
<ArrowUp v-else />
</n-icon>
<Icon v-if="showTag" icon="ph:caret-down"></Icon>
<Icon v-else icon="ph:caret-up"></Icon>
</template>
标签
</n-button>

View File

@@ -1,7 +1,5 @@
<script lang="ts" setup>
import Medal1 from "~/shared/icons/Medal1.vue"
import Medal2 from "~/shared/icons/Medal2.vue"
import Medal3 from "~/shared/icons/Medal3.vue"
import { Icon } from "@iconify/vue"
interface Props {
page: number
@@ -23,9 +21,9 @@ const tooltip = computed(() => {
<n-tooltip v-else>
<template #trigger>
<n-icon :size="20">
<Medal1 v-if="index === 1" />
<Medal2 v-if="index === 2" />
<Medal3 v-if="index === 3" />
<Icon v-if="index === 1" icon="openmoji:1st-place-medal"></Icon>
<Icon v-if="index === 2" icon="openmoji:2nd-place-medal"></Icon>
<Icon v-if="index === 3" icon="openmoji:3rd-place-medal"></Icon>
</n-icon>
</template>
{{ tooltip }}

View File

@@ -1,5 +1,5 @@
<script lang="ts" setup>
import Filter from "~/shared/icons/Filter.vue"
import { Icon } from "@iconify/vue"
defineEmits(["click", "search"])
</script>
@@ -8,9 +8,7 @@ defineEmits(["click", "search"])
<n-button text type="info" @click="$emit('click')"><slot></slot></n-button>
<n-button text @click="$emit('search')">
<template #icon>
<n-icon color="#ccc">
<Filter />
</n-icon>
<Icon icon="openmoji:filter"></Icon>
</template>
</n-button>
</n-flex>

View File

@@ -5,9 +5,7 @@
</n-button>
<n-button text @click="goto">
<template #icon>
<n-icon color="#aaa">
<Code />
</n-icon>
<Icon icon="openmoji:backhand-index-pointing-right"></Icon>
</template>
</n-button>
</n-flex>
@@ -17,7 +15,7 @@
</template>
<script setup lang="ts">
import Code from "~/shared/icons/Code.vue"
import { Icon } from "@iconify/vue"
import { Submission } from "~/utils/types"
interface Props {

View File

@@ -1,24 +1,19 @@
<script setup lang="ts">
import { Contest } from "utils/types"
import { ContestType } from "utils/constants"
import Lock from "~/shared/icons/Lock.vue"
import { Icon } from "@iconify/vue"
defineProps<{ contest: Contest }>()
</script>
<template>
<n-space>
<span>{{ contest.title }}</span>
<n-icon
size="large"
class="lockIcon"
<n-flex>
<Icon
v-if="contest.contest_type === ContestType.private"
>
<Lock />
</n-icon>
</n-space>
:height="20"
:width="20"
icon="openmoji:locked"
></Icon>
<span>{{ contest.title }}</span>
</n-flex>
</template>
<style scoped>
.lockIcon {
transform: translateY(2px);
}
</style>
<style scoped></style>

View File

@@ -1,12 +1,14 @@
<script setup lang="ts">
import copy from "copy-text-to-clipboard"
import Select from "~/shared/icons/Select.vue"
import Copy from "~/shared/icons/Copy.vue"
import { Icon } from "@iconify/vue"
defineProps<{ value: string }>()
const [copied, toggle] = useToggle()
const { start } = useTimeoutFn(() => toggle(false), 1000, { immediate: false })
const COPY = h(Icon, { icon: "emojione:clipboard" })
const OK = h(Icon, { icon: "openmoji:check-mark" })
function handleClick(value: string) {
copy(value)
toggle(true)
@@ -17,7 +19,7 @@ function handleClick(value: string) {
<n-tooltip trigger="hover">
<template #trigger>
<n-icon class="icon" @click="handleClick(value)">
<component :is="copied ? Select : Copy"></component>
<component :is="copied ? OK : COPY"></component>
</n-icon>
</template>
{{ copied ? "已复制" : "复制" }}
@@ -26,6 +28,6 @@ function handleClick(value: string) {
<style scoped>
.icon {
cursor: pointer;
transform: translateY(2px);
font-size: 20px;
}
</style>

View File

@@ -9,8 +9,7 @@ import {
screenSwitchLabel,
switchScreenMode,
} from "~/shared/composables/switchScreen"
import Sunny from "../icons/Sunny.vue"
import Moon from "../icons/Moon.vue"
import { Icon } from "@iconify/vue"
const isDark = useDark()
const toggleDark = useToggle(isDark)
@@ -29,6 +28,31 @@ async function handleLogout() {
router.replace("/")
}
function renderIcon(icon: string) {
return () => h(Icon, { icon })
}
const avatars = [
"openmoji:glowing-star",
"openmoji:heart-with-ribbon",
"openmoji:flag-china",
"openmoji:fish-cake-with-swirl",
"openmoji:astronaut",
"openmoji:alien-monster",
"openmoji:zany-face",
"openmoji:eyes",
"openmoji:desktop-computer",
"openmoji:watermelon",
"openmoji:cheese-wedge",
"openmoji:wrapped-gift",
]
const avatar = ref(avatars[Math.floor(Math.random() * avatars.length)])
function getRandomAvatar() {
avatar.value = avatars[Math.floor(Math.random() * avatars.length)]
}
onMounted(() => {
userStore.getMyProfile()
configStore.getConfig()
@@ -38,29 +62,35 @@ const menus = computed<MenuOption[]>(() => [
{
label: () => h(RouterLink, { to: "/" }, { default: () => "题库" }),
key: "problem",
icon: renderIcon("openmoji:jack-o-lantern"),
},
{
label: () =>
h(RouterLink, { to: "/submission" }, { default: () => "提交" }),
key: "submission",
icon: renderIcon("openmoji:clown-face"),
},
{
label: () => h(RouterLink, { to: "/contest" }, { default: () => "比赛" }),
key: "contest",
icon: renderIcon("openmoji:face-with-tears-of-joy"),
},
{
label: () => h(RouterLink, { to: "/rank" }, { default: () => "排名" }),
key: "rank",
icon: renderIcon("openmoji:sports-medal"),
},
{
label: () =>
h(RouterLink, { to: "/announcement" }, { default: () => "公告" }),
key: "announcement",
icon: renderIcon("openmoji:hamburger"),
},
{
label: () => h(RouterLink, { to: "/admin" }, { default: () => "后台" }),
show: userStore.isAdminRole,
key: "admin",
icon: renderIcon("openmoji:hacker-cat"),
},
])
@@ -130,7 +160,12 @@ function goHome() {
</n-button>
<div v-if="userStore.isFinished">
<n-dropdown v-if="userStore.isAuthed" :options="options">
<n-button>{{ userStore.user!.username }}</n-button>
<n-button @click="getRandomAvatar">
<template #icon>
<Icon :icon="avatar"></Icon>
</template>
{{ userStore.user!.username }}
</n-button>
</n-dropdown>
<n-space align="center" v-else>
<n-button @click="toggleLogin(true)">登录</n-button>
@@ -144,8 +179,8 @@ function goHome() {
</div>
<n-button circle @click="toggleDark()">
<template #icon>
<n-icon v-if="isDark"><Sunny /></n-icon>
<n-icon v-else> <Moon /></n-icon>
<Icon v-if="isDark" icon="ph:sun"></Icon>
<Icon v-else icon="ph:moon"></Icon>
</template>
</n-button>
</n-space>

View File

@@ -1,13 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 24 24"
>
<path
fill="currentColor"
d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6l-6-6l1.41-1.41z"
></path>
</svg>
</template>

View File

@@ -1,13 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 24 24"
>
<path
fill="currentColor"
d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6l-6 6z"
></path>
</svg>
</template>

View File

@@ -1,13 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 24 24"
>
<path
fill="currentColor"
d="M12 22q-.825 0-1.413-.588T10 20h4q0 .825-.588 1.413T12 22Zm-4-3v-2h8v2H8Zm.25-3q-1.725-1.025-2.738-2.75T4.5 9.5q0-3.125 2.188-5.313T12 2q3.125 0 5.313 2.188T19.5 9.5q0 2.025-1.012 3.75T15.75 16h-7.5Zm.6-2h6.3q1.125-.8 1.738-1.975T17.5 9.5q0-2.3-1.6-3.9T12 4Q9.7 4 8.1 5.6T6.5 9.5q0 1.35.613 2.525T8.85 14ZM12 14Z"
></path>
</svg>
</template>

View File

@@ -1,13 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 24 24"
>
<path
fill="currentColor"
d="m8 18l-6-6l6-6l1.425 1.425l-4.6 4.6L9.4 16.6zm8 0l-1.425-1.425l4.6-4.6L14.6 7.4L16 6l6 6z"
></path>
</svg>
</template>

View File

@@ -1,13 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 24 24"
>
<path
fill="currentColor"
d="M9 18q-.825 0-1.413-.588T7 16V4q0-.825.588-1.413T9 2h9q.825 0 1.413.588T20 4v12q0 .825-.588 1.413T18 18H9Zm0-2h9V4H9v12Zm-4 6q-.825 0-1.413-.588T3 20V6h2v14h11v2H5Zm4-6V4v12Z"
></path>
</svg>
</template>

View File

@@ -1,13 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 24 24"
>
<path
fill="currentColor"
d="M11 20q-.425 0-.712-.288T10 19v-6L4.2 5.6q-.375-.5-.112-1.05T5 4h14q.65 0 .913.55T19.8 5.6L14 13v6q0 .425-.288.713T13 20z"
></path>
</svg>
</template>

View File

@@ -1,13 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 24 24"
>
<path
fill="currentColor"
d="M11 17h2v-6h-2v6Zm1-8q.425 0 .713-.288T13 8q0-.425-.288-.713T12 7q-.425 0-.713.288T11 8q0 .425.288.713T12 9Zm0 13q-2.075 0-3.9-.788t-3.175-2.137q-1.35-1.35-2.137-3.175T2 12q0-2.075.788-3.9t2.137-3.175q1.35-1.35 3.175-2.137T12 2q2.075 0 3.9.788t3.175 2.137q1.35 1.35 2.138 3.175T22 12q0 2.075-.788 3.9t-2.137 3.175q-1.35 1.35-3.175 2.138T12 22Zm0-2q3.35 0 5.675-2.325T20 12q0-3.35-2.325-5.675T12 4Q8.65 4 6.325 6.325T4 12q0 3.35 2.325 5.675T12 20Zm0-8Z"
></path>
</svg>
</template>

View File

@@ -1,139 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 24 24"
>
<circle cx="12" cy="2" r="0" fill="currentColor">
<animate
attributeName="r"
begin="0"
calcMode="spline"
dur="1s"
keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8"
repeatCount="indefinite"
values="0;2;0;0"
></animate>
</circle>
<circle
cx="12"
cy="2"
r="0"
fill="currentColor"
transform="rotate(45 12 12)"
>
<animate
attributeName="r"
begin="0.125s"
calcMode="spline"
dur="1s"
keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8"
repeatCount="indefinite"
values="0;2;0;0"
></animate>
</circle>
<circle
cx="12"
cy="2"
r="0"
fill="currentColor"
transform="rotate(90 12 12)"
>
<animate
attributeName="r"
begin="0.25s"
calcMode="spline"
dur="1s"
keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8"
repeatCount="indefinite"
values="0;2;0;0"
></animate>
</circle>
<circle
cx="12"
cy="2"
r="0"
fill="currentColor"
transform="rotate(135 12 12)"
>
<animate
attributeName="r"
begin="0.375s"
calcMode="spline"
dur="1s"
keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8"
repeatCount="indefinite"
values="0;2;0;0"
></animate>
</circle>
<circle
cx="12"
cy="2"
r="0"
fill="currentColor"
transform="rotate(180 12 12)"
>
<animate
attributeName="r"
begin="0.5s"
calcMode="spline"
dur="1s"
keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8"
repeatCount="indefinite"
values="0;2;0;0"
></animate>
</circle>
<circle
cx="12"
cy="2"
r="0"
fill="currentColor"
transform="rotate(225 12 12)"
>
<animate
attributeName="r"
begin="0.625s"
calcMode="spline"
dur="1s"
keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8"
repeatCount="indefinite"
values="0;2;0;0"
></animate>
</circle>
<circle
cx="12"
cy="2"
r="0"
fill="currentColor"
transform="rotate(270 12 12)"
>
<animate
attributeName="r"
begin="0.75s"
calcMode="spline"
dur="1s"
keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8"
repeatCount="indefinite"
values="0;2;0;0"
></animate>
</circle>
<circle
cx="12"
cy="2"
r="0"
fill="currentColor"
transform="rotate(315 12 12)"
>
<animate
attributeName="r"
begin="0.875s"
calcMode="spline"
dur="1s"
keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8"
repeatCount="indefinite"
values="0;2;0;0"
></animate>
</circle>
</svg>
</template>

View File

@@ -1,13 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 24 24"
>
<path
fill="currentColor"
d="M6 22q-.825 0-1.413-.588T4 20V10q0-.825.588-1.413T6 8h1V6q0-2.075 1.463-3.538T12 1q2.075 0 3.538 1.463T17 6v2h1q.825 0 1.413.588T20 10v10q0 .825-.588 1.413T18 22H6Zm0-2h12V10H6v10Zm6-3q.825 0 1.413-.588T14 15q0-.825-.588-1.413T12 13q-.825 0-1.413.588T10 15q0 .825.588 1.413T12 17ZM9 8h6V6q0-1.25-.875-2.125T12 3q-1.25 0-2.125.875T9 6v2ZM6 20V10v10Z"
></path>
</svg>
</template>

View File

@@ -1,19 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 36 36"
>
<path fill="#55ACEE" d="m18 8l-7-8H0l14 17l11.521-4.75z"></path>
<path fill="#3B88C3" d="m25 0l-7 8l5.39 7.312l1.227-1.489L36 0z"></path>
<path
fill="#FFAC33"
d="M23.205 16.026c.08-.217.131-.448.131-.693a2 2 0 0 0-2-2h-6.667a2 2 0 0 0-2 2c0 .245.05.476.131.693c-3.258 1.826-5.464 5.307-5.464 9.307C7.335 31.224 12.111 36 18.002 36s10.667-4.776 10.667-10.667c0-4-2.206-7.481-5.464-9.307z"
></path>
<path
fill="#9E5200"
d="M19.404 18.6h-1.721l-2.73 2.132a.528.528 0 0 0-.112.28v1.178c0 .186.15.354.337.354h1.795v8.414c0 .188.15.355.355.355h2.076c.186 0 .336-.168.336-.355V18.954c0-.186-.149-.354-.336-.354z"
></path>
</svg>
</template>

View File

@@ -1,19 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 36 36"
>
<path fill="#55ACEE" d="m18 8l-7-8H0l14 17l11.521-4.75z"></path>
<path fill="#3B88C3" d="m25 0l-7 8l5.39 7.312l1.227-1.489L36 0z"></path>
<path
fill="#CCD6DD"
d="M23.205 16.026c.08-.217.131-.448.131-.693a2 2 0 0 0-2-2h-6.667a2 2 0 0 0-2 2c0 .245.05.476.131.693c-3.258 1.826-5.464 5.307-5.464 9.307C7.335 31.224 12.111 36 18.002 36s10.667-4.776 10.667-10.667c0-4-2.206-7.481-5.464-9.307z"
></path>
<path
fill="#627077"
d="M22.002 28.921h-3.543c.878-1.234 2.412-3.234 3.01-4.301c.449-.879.729-1.439.729-2.43c0-2.076-1.57-3.777-4.244-3.777c-2.225 0-3.74 1.832-3.74 1.832c-.131.15-.112.374.019.487l1.141 1.159a.36.36 0 0 0 .523 0c.355-.393 1.047-.935 1.813-.935c1.047 0 1.646.635 1.646 1.346c0 .523-.243 1.047-.486 1.421c-1.104 1.682-3.871 5.441-4.955 6.862v.374c0 .188.149.355.355.355h7.732a.368.368 0 0 0 .355-.355v-1.682a.367.367 0 0 0-.355-.356z"
></path>
</svg>
</template>

View File

@@ -1,37 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 128 128"
>
<defs><path id="notoV13rdPlaceMedal0" d="M0 0h128v128H0z"></path></defs>
<clipPath id="notoV13rdPlaceMedal1">
<use href="#notoV13rdPlaceMedal0"></use>
</clipPath>
<g clipPath="url(#notoV13rdPlaceMedal1)">
<path fill="#006ca2" d="M50.14 61.85h25.59L107.72 0H82.13z"></path>
<path
fill="#2f2f2f"
d="M66.13 30.92L53.34 55.67l3.2 6.18h19.19l3.2-6.18z"
></path>
<path
fill="#f79329"
d="M77.77 76.78H52.18V61.85h25.59v14.93zm0-21.33H52.18a6.4 6.4 0 0 0-6.4 6.4v14.93c0 3.54 2.86 6.4 6.4 6.4h25.59c3.54 0 6.4-2.86 6.4-6.4V61.85c0-3.54-2.86-6.4-6.4-6.4"
></path>
<path
fill="#f79329"
d="M96.97 95.97c0 17.67-14.32 31.99-31.99 31.99c-17.67 0-31.99-14.32-31.99-31.99c0-17.67 14.32-31.99 31.99-31.99c17.67 0 31.99 14.33 31.99 31.99"
></path>
<path
fill="#fff"
d="M43.53 88.19c-.42 0-.84-.08-1.24-.26c-1.54-.66-2.28-2.45-1.68-4.01c.01-.03.02-.05.03-.07c.01-.05.01-.04.04-.08A22.803 22.803 0 0 1 56.56 70.4c.35-.08.72.09.88.42c.16.33.07.73-.22.96c-4.67 3.71-8.4 8.72-10.79 14.47c0 .01-.01.02-.01.02c0 .01 0 .01-.01.02c-.33.77-.94 1.37-1.72 1.67c-.37.16-.77.23-1.16.23"
></path>
<path fill="#006ca2" d="M77.86 61.85H52.27L20.28 0h25.59z"></path>
<path
fill="#ae3d09"
d="M64.7 111.85h.16c1.81-.03 5.24-.43 7.86-2.78c2.18-1.96 3.19-4.64 2.78-7.36c-.39-2.53-1.98-4.68-4.41-6.01c2.33-1.75 3.73-3.94 3.97-6.22c.24-2.21-.63-4.41-2.5-6.37c-1.88-1.97-4.42-3.01-7.33-3.01c-4.49 0-8.62 2.37-9.87 4.09c-.11.14-.11.34-.01.5l2.79 4.03c.07.1.17.17.29.18c.11.02.24-.01.33-.09c.03-.02 3.06-2.51 5.65-2.51c1.18 0 2.05.52 2.67 1.58c.51.89.61 1.7.3 2.48c-.85 2.1-4.45 3.17-4.48 3.18c-.18.05-.31.22-.31.41v3.55c0 .2.13.37.33.41c.04.01 3.46.86 4.24 2.82c.31.77.15 1.64-.46 2.59c-.65 1-1.63 1.51-2.92 1.51c-2.5 0-5.56-1.9-6.9-3.09a.443.443 0 0 0-.33-.11c-.13.01-.23.08-.3.18l-2.79 4.03c-.11.16-.1.37.03.52c.17.23 4.73 5.49 11.21 5.49"
></path>
</g>
</svg>
</template>

View File

@@ -1,13 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 24 24"
>
<path
fill="currentColor"
d="M12 21q-3.775 0-6.388-2.613T3 12q0-3.45 2.25-5.988T11 3.05q.325-.05.575.088t.4.362q.15.225.163.525t-.188.575q-.425.65-.638 1.375T11.1 7.5q0 2.25 1.575 3.825T16.5 12.9q.775 0 1.538-.225t1.362-.625q.275-.175.563-.162t.512.137q.25.125.388.375t.087.6q-.35 3.45-2.938 5.725T12 21Zm0-2q2.2 0 3.95-1.213t2.55-3.162q-.5.125-1 .2t-1 .075q-3.075 0-5.238-2.163T9.1 7.5q0-.5.075-1t.2-1q-1.95.8-3.163 2.55T5 12q0 2.9 2.05 4.95T12 19Zm-.25-6.75Z"
></path>
</svg>
</template>

View File

@@ -1,10 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 24 24"
>
<path fill="currentColor" d="M8 19V5l11 7l-11 7Z"></path>
</svg>
</template>

View File

@@ -1,13 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 1024 1024"
>
<path
fill="currentColor"
d="M77.248 415.04a64 64 0 0 1 90.496 0l226.304 226.304L846.528 188.8a64 64 0 1 1 90.56 90.496l-543.04 543.04l-316.8-316.8a64 64 0 0 1 0-90.496z"
></path>
</svg>
</template>

View File

@@ -1,13 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 1024 1024"
>
<path
fill="currentColor"
d="M128 448h768q64 0 64 64t-64 64H128q-64 0-64-64t64-64z"
></path>
</svg>
</template>

View File

@@ -1,13 +0,0 @@
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 24 24"
>
<path
fill="currentColor"
d="M12 5q-.425 0-.713-.288T11 4V2q0-.425.288-.713T12 1q.425 0 .713.288T13 2v2q0 .425-.288.713T12 5Zm4.95 2.05q-.275-.275-.275-.687t.275-.713l1.4-1.425q.3-.3.712-.3t.713.3q.275.275.275.7t-.275.7L18.35 7.05q-.275.275-.7.275t-.7-.275ZM20 13q-.425 0-.713-.288T19 12q0-.425.288-.713T20 11h2q.425 0 .713.288T23 12q0 .425-.288.713T22 13h-2Zm-8 10q-.425 0-.713-.288T11 22v-2q0-.425.288-.713T12 19q.425 0 .713.288T13 20v2q0 .425-.288.713T12 23ZM5.65 7.05l-1.425-1.4q-.3-.3-.3-.725t.3-.7q.275-.275.7-.275t.7.275L7.05 5.65q.275.275.275.7t-.275.7q-.3.275-.7.275t-.7-.275Zm12.7 12.725l-1.4-1.425q-.275-.3-.275-.713t.275-.687q.275-.275.688-.275t.712.275l1.425 1.4q.3.275.288.7t-.288.725q-.3.3-.725.3t-.7-.3ZM2 13q-.425 0-.713-.288T1 12q0-.425.288-.713T2 11h2q.425 0 .713.288T5 12q0 .425-.288.713T4 13H2Zm2.225 6.775q-.275-.275-.275-.7t.275-.7L5.65 16.95q.275-.275.687-.275t.713.275q.3.3.3.713t-.3.712l-1.4 1.4q-.3.3-.725.3t-.7-.3ZM12 18q-2.5 0-4.25-1.75T6 12q0-2.5 1.75-4.25T12 6q2.5 0 4.25 1.75T18 12q0 2.5-1.75 4.25T12 18Zm0-2q1.65 0 2.825-1.175T16 12q0-1.65-1.175-2.825T12 8q-1.65 0-2.825 1.175T8 12q0 1.65 1.175 2.825T12 16Zm0-4Z"
></path>
</svg>
</template>