mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-25 18:26:05 +08:00
feat(electron): add welcome page for meetings (#12042)
fix AF-2572   <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Introduced a Meetings welcome page with a beta disclaimer and "Get Started" flow. - Added separate toggles for AI auto summary and AI auto todo list in meeting settings. - Added "Beta" labels to relevant settings and sidebar items for clearer feature status. - Enhanced settings UI with improved headers, subtitles, and new styling. - **Improvements** - Meeting settings now allow independent control over AI-generated summaries and todo lists. - Updated internationalization to support new meeting and AI transcription features, including richer prompts and hints. - Refined logic for enabling meeting recording, including improved permission handling. - Simplified transcription logic to rely solely on AI enablement flag. - **Bug Fixes** - Fixed display and control of meeting settings based on beta disclaimer acceptance. - **Chores** - Updated localization files and completeness percentages for several languages. - Removed deprecated feature flag for enabling meetings. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { UserFeatureService } from '@affine/core/modules/cloud/services/user-feature';
|
||||
import type { SettingTab } from '@affine/core/modules/dialogs/constant';
|
||||
import { FeatureFlagService } from '@affine/core/modules/feature-flag';
|
||||
import { MeetingSettingsService } from '@affine/core/modules/media/services/meeting-settings';
|
||||
import { useI18n } from '@affine/i18n';
|
||||
import {
|
||||
AppearanceIcon,
|
||||
@@ -13,7 +14,7 @@ import {
|
||||
PenIcon,
|
||||
} from '@blocksuite/icons/rc';
|
||||
import { useLiveData, useServices } from '@toeverything/infra';
|
||||
import { useEffect } from 'react';
|
||||
import { useEffect, useMemo } from 'react';
|
||||
|
||||
import { AuthService, ServerService } from '../../../../modules/cloud';
|
||||
import type { SettingSidebarItem, SettingState } from '../types';
|
||||
@@ -33,13 +34,19 @@ export type GeneralSettingList = SettingSidebarItem[];
|
||||
|
||||
export const useGeneralSettingList = (): GeneralSettingList => {
|
||||
const t = useI18n();
|
||||
const { authService, serverService, userFeatureService, featureFlagService } =
|
||||
useServices({
|
||||
AuthService,
|
||||
ServerService,
|
||||
UserFeatureService,
|
||||
FeatureFlagService,
|
||||
});
|
||||
const {
|
||||
authService,
|
||||
serverService,
|
||||
userFeatureService,
|
||||
featureFlagService,
|
||||
meetingSettingsService,
|
||||
} = useServices({
|
||||
AuthService,
|
||||
ServerService,
|
||||
UserFeatureService,
|
||||
FeatureFlagService,
|
||||
MeetingSettingsService,
|
||||
});
|
||||
const status = useLiveData(authService.session.status$);
|
||||
const loggedIn = status === 'authenticated';
|
||||
const hasPaymentFeature = useLiveData(
|
||||
@@ -48,97 +55,102 @@ export const useGeneralSettingList = (): GeneralSettingList => {
|
||||
const enableEditorSettings = useLiveData(
|
||||
featureFlagService.flags.enable_editor_settings.$
|
||||
);
|
||||
const enableMeetings = useLiveData(
|
||||
featureFlagService.flags.enable_meetings.$
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
userFeatureService.userFeature.revalidate();
|
||||
}, [userFeatureService]);
|
||||
|
||||
const settings: GeneralSettingList = [
|
||||
{
|
||||
key: 'appearance',
|
||||
title: t['com.affine.settings.appearance'](),
|
||||
icon: <AppearanceIcon />,
|
||||
testId: 'appearance-panel-trigger',
|
||||
},
|
||||
{
|
||||
key: 'shortcuts',
|
||||
title: t['com.affine.keyboardShortcuts.title'](),
|
||||
icon: <KeyboardIcon />,
|
||||
testId: 'shortcuts-panel-trigger',
|
||||
},
|
||||
];
|
||||
if (loggedIn) {
|
||||
settings.push({
|
||||
key: 'notifications',
|
||||
title: t['com.affine.setting.notifications'](),
|
||||
icon: <NotificationIcon />,
|
||||
testId: 'notifications-panel-trigger',
|
||||
});
|
||||
}
|
||||
if (enableEditorSettings) {
|
||||
// add editor settings to second position
|
||||
settings.splice(1, 0, {
|
||||
key: 'editor',
|
||||
title: t['com.affine.settings.editorSettings'](),
|
||||
icon: <PenIcon />,
|
||||
testId: 'editor-panel-trigger',
|
||||
});
|
||||
}
|
||||
const meetingSettings = useLiveData(meetingSettingsService.settings$);
|
||||
|
||||
return useMemo(() => {
|
||||
const settings: GeneralSettingList = [
|
||||
{
|
||||
key: 'appearance',
|
||||
title: t['com.affine.settings.appearance'](),
|
||||
icon: <AppearanceIcon />,
|
||||
testId: 'appearance-panel-trigger',
|
||||
},
|
||||
{
|
||||
key: 'shortcuts',
|
||||
title: t['com.affine.keyboardShortcuts.title'](),
|
||||
icon: <KeyboardIcon />,
|
||||
testId: 'shortcuts-panel-trigger',
|
||||
},
|
||||
];
|
||||
if (loggedIn) {
|
||||
settings.push({
|
||||
key: 'notifications',
|
||||
title: t['com.affine.setting.notifications'](),
|
||||
icon: <NotificationIcon />,
|
||||
testId: 'notifications-panel-trigger',
|
||||
});
|
||||
}
|
||||
if (enableEditorSettings) {
|
||||
// add editor settings to second position
|
||||
settings.splice(1, 0, {
|
||||
key: 'editor',
|
||||
title: t['com.affine.settings.editorSettings'](),
|
||||
icon: <PenIcon />,
|
||||
testId: 'editor-panel-trigger',
|
||||
});
|
||||
}
|
||||
|
||||
if (enableMeetings) {
|
||||
settings.push({
|
||||
key: 'meetings',
|
||||
title: t['com.affine.settings.meetings'](),
|
||||
icon: <MeetingIcon />,
|
||||
testId: 'meetings-panel-trigger',
|
||||
beta: !meetingSettings?.enabled,
|
||||
});
|
||||
}
|
||||
|
||||
if (hasPaymentFeature) {
|
||||
settings.splice(4, 0, {
|
||||
key: 'plans',
|
||||
title: t['com.affine.payment.title'](),
|
||||
icon: <UpgradeIcon />,
|
||||
testId: 'plans-panel-trigger',
|
||||
});
|
||||
if (loggedIn) {
|
||||
if (hasPaymentFeature) {
|
||||
settings.splice(4, 0, {
|
||||
key: 'billing',
|
||||
title: t['com.affine.payment.billing-setting.title'](),
|
||||
icon: <PaymentIcon />,
|
||||
testId: 'billing-panel-trigger',
|
||||
key: 'plans',
|
||||
title: t['com.affine.payment.title'](),
|
||||
icon: <UpgradeIcon />,
|
||||
testId: 'plans-panel-trigger',
|
||||
});
|
||||
if (loggedIn) {
|
||||
settings.splice(4, 0, {
|
||||
key: 'billing',
|
||||
title: t['com.affine.payment.billing-setting.title'](),
|
||||
icon: <PaymentIcon />,
|
||||
testId: 'billing-panel-trigger',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (BUILD_CONFIG.isElectron) {
|
||||
settings.push({
|
||||
key: 'backup',
|
||||
title: t['com.affine.settings.workspace.backup'](),
|
||||
icon: <FolderIcon />,
|
||||
testId: 'backup-panel-trigger',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (BUILD_CONFIG.isElectron) {
|
||||
settings.push({
|
||||
key: 'backup',
|
||||
title: t['com.affine.settings.workspace.backup'](),
|
||||
icon: <FolderIcon />,
|
||||
testId: 'backup-panel-trigger',
|
||||
});
|
||||
}
|
||||
|
||||
settings.push(
|
||||
{
|
||||
key: 'experimental-features',
|
||||
title: t['com.affine.settings.workspace.experimental-features'](),
|
||||
icon: <ExperimentIcon />,
|
||||
testId: 'experimental-features-trigger',
|
||||
},
|
||||
{
|
||||
key: 'about',
|
||||
title: t['com.affine.aboutAFFiNE.title'](),
|
||||
icon: <InformationIcon />,
|
||||
testId: 'about-panel-trigger',
|
||||
}
|
||||
);
|
||||
|
||||
return settings;
|
||||
settings.push(
|
||||
{
|
||||
key: 'experimental-features',
|
||||
title: t['com.affine.settings.workspace.experimental-features'](),
|
||||
icon: <ExperimentIcon />,
|
||||
testId: 'experimental-features-trigger',
|
||||
},
|
||||
{
|
||||
key: 'about',
|
||||
title: t['com.affine.aboutAFFiNE.title'](),
|
||||
icon: <InformationIcon />,
|
||||
testId: 'about-panel-trigger',
|
||||
}
|
||||
);
|
||||
return settings;
|
||||
}, [
|
||||
t,
|
||||
loggedIn,
|
||||
enableEditorSettings,
|
||||
meetingSettings?.enabled,
|
||||
hasPaymentFeature,
|
||||
]);
|
||||
};
|
||||
|
||||
interface GeneralSettingProps {
|
||||
|
||||
@@ -4,7 +4,6 @@ import {
|
||||
MenuItem,
|
||||
MenuTrigger,
|
||||
Switch,
|
||||
useConfirmModal,
|
||||
} from '@affine/component';
|
||||
import {
|
||||
SettingHeader,
|
||||
@@ -15,7 +14,6 @@ import { useAsyncCallback } from '@affine/core/components/hooks/affine-async-hoo
|
||||
import { MeetingSettingsService } from '@affine/core/modules/media/services/meeting-settings';
|
||||
import type { MeetingSettingsSchema } from '@affine/electron/main/shared-state-schema';
|
||||
import { Trans, useI18n } from '@affine/i18n';
|
||||
import track from '@affine/track';
|
||||
import {
|
||||
ArrowRightSmallIcon,
|
||||
DoneIcon,
|
||||
@@ -25,6 +23,8 @@ import { useLiveData, useService } from '@toeverything/infra';
|
||||
import { useCallback, useEffect, useMemo, useState } from 'react';
|
||||
|
||||
import * as styles from './styles.css';
|
||||
import { useEnableRecording } from './use-enable-recording';
|
||||
import { MeetingsWelcomePage } from './welcome-page';
|
||||
|
||||
const RecordingModes: MeetingSettingsSchema['recordingMode'][] = [
|
||||
'prompt',
|
||||
@@ -130,7 +130,7 @@ const PermissionSettingRow = ({
|
||||
);
|
||||
};
|
||||
|
||||
export const MeetingsSettings = () => {
|
||||
const MeetingsSettingsMain = () => {
|
||||
const t = useI18n();
|
||||
const meetingSettingsService = useService(MeetingSettingsService);
|
||||
const settings = useLiveData(meetingSettingsService.settings$);
|
||||
@@ -142,8 +142,6 @@ export const MeetingsSettings = () => {
|
||||
microphone: boolean;
|
||||
}>();
|
||||
|
||||
const confirmModal = useConfirmModal();
|
||||
|
||||
useEffect(() => {
|
||||
meetingSettingsService
|
||||
.isRecordingFeatureAvailable()
|
||||
@@ -161,44 +159,18 @@ export const MeetingsSettings = () => {
|
||||
.catch(err => console.log(err));
|
||||
}, [meetingSettingsService]);
|
||||
|
||||
const handleEnabledChange = useAsyncCallback(
|
||||
async (checked: boolean) => {
|
||||
try {
|
||||
track.$.settingsPanel.meetings.toggleMeetingFeatureFlag({
|
||||
option: checked ? 'on' : 'off',
|
||||
type: 'Meeting record',
|
||||
});
|
||||
await meetingSettingsService.setEnabled(checked);
|
||||
} catch {
|
||||
confirmModal.openConfirmModal({
|
||||
title:
|
||||
t['com.affine.settings.meetings.record.permission-modal.title'](),
|
||||
description:
|
||||
t[
|
||||
'com.affine.settings.meetings.record.permission-modal.description'
|
||||
](),
|
||||
onConfirm: async () => {
|
||||
await meetingSettingsService.showRecordingPermissionSetting(
|
||||
'screen'
|
||||
);
|
||||
},
|
||||
cancelText: t['com.affine.recording.dismiss'](),
|
||||
confirmButtonOptions: {
|
||||
variant: 'primary',
|
||||
},
|
||||
confirmText:
|
||||
t[
|
||||
'com.affine.settings.meetings.record.permission-modal.open-setting'
|
||||
](),
|
||||
});
|
||||
}
|
||||
const handleEnabledChange = useEnableRecording();
|
||||
|
||||
const handleAutoSummaryChange = useCallback(
|
||||
(checked: boolean) => {
|
||||
meetingSettingsService.setAutoSummary(checked);
|
||||
},
|
||||
[confirmModal, meetingSettingsService, t]
|
||||
[meetingSettingsService]
|
||||
);
|
||||
|
||||
const handleAutoTranscriptionChange = useCallback(
|
||||
const handleAutoTodoChange = useCallback(
|
||||
(checked: boolean) => {
|
||||
meetingSettingsService.setAutoTranscription(checked);
|
||||
meetingSettingsService.setAutoTodo(checked);
|
||||
},
|
||||
[meetingSettingsService]
|
||||
);
|
||||
@@ -225,7 +197,22 @@ export const MeetingsSettings = () => {
|
||||
|
||||
return (
|
||||
<div className={styles.meetingWrapper}>
|
||||
<SettingHeader title={t['com.affine.settings.meetings']()} />
|
||||
<SettingHeader
|
||||
beta
|
||||
title={t['com.affine.settings.meetings']()}
|
||||
subtitle={
|
||||
t['com.affine.settings.meetings.setting.prompt']() +
|
||||
'\n' +
|
||||
(
|
||||
<Trans
|
||||
i18nKey="com.affine.settings.meetings.setting.prompt.2"
|
||||
components={{
|
||||
strong: <strong />,
|
||||
}}
|
||||
/>
|
||||
)
|
||||
}
|
||||
/>
|
||||
|
||||
<SettingRow
|
||||
name={t['com.affine.settings.meetings.enable.title']()}
|
||||
@@ -284,16 +271,28 @@ export const MeetingsSettings = () => {
|
||||
>
|
||||
<SettingRow
|
||||
name={t[
|
||||
'com.affine.settings.meetings.transcription.auto-transcription'
|
||||
'com.affine.settings.meetings.transcription.auto-summary'
|
||||
]()}
|
||||
desc={t[
|
||||
'com.affine.settings.meetings.transcription.auto-transcription.description'
|
||||
'com.affine.settings.meetings.transcription.auto-summary.description'
|
||||
]()}
|
||||
>
|
||||
<Switch
|
||||
checked={settings.autoTranscription}
|
||||
onChange={handleAutoTranscriptionChange}
|
||||
data-testid="meetings-auto-transcription-switch"
|
||||
checked={settings.autoTranscriptionSummary}
|
||||
onChange={handleAutoSummaryChange}
|
||||
data-testid="meetings-auto-summary-switch"
|
||||
/>
|
||||
</SettingRow>
|
||||
<SettingRow
|
||||
name={t['com.affine.settings.meetings.transcription.auto-todo']()}
|
||||
desc={t[
|
||||
'com.affine.settings.meetings.transcription.auto-todo.description'
|
||||
]()}
|
||||
>
|
||||
<Switch
|
||||
checked={settings.autoTranscriptionTodo}
|
||||
onChange={handleAutoTodoChange}
|
||||
data-testid="meetings-auto-todo-switch"
|
||||
/>
|
||||
</SettingRow>
|
||||
</SettingWrapper>
|
||||
@@ -324,3 +323,15 @@ export const MeetingsSettings = () => {
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export const MeetingsSettings = () => {
|
||||
const meetingSettingsService = useService(MeetingSettingsService);
|
||||
const settings = useLiveData(meetingSettingsService.settings$);
|
||||
const accepted = settings.betaDisclaimerAccepted || settings.enabled;
|
||||
|
||||
if (!accepted) {
|
||||
return <MeetingsWelcomePage />;
|
||||
}
|
||||
|
||||
return <MeetingsSettingsMain />;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,473 @@
|
||||
<svg
|
||||
width="264"
|
||||
height="75"
|
||||
viewBox="0 0 264 75"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<g filter="url(#filter0_d_2711_141106)">
|
||||
<rect
|
||||
x="4"
|
||||
y="6.40973"
|
||||
width="60.3829"
|
||||
height="60.3829"
|
||||
rx="12.5798"
|
||||
fill="#141414"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<rect
|
||||
x="4.15725"
|
||||
y="6.56698"
|
||||
width="60.0685"
|
||||
height="60.0685"
|
||||
rx="12.4225"
|
||||
stroke="#414141"
|
||||
stroke-width="0.314495"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<path
|
||||
d="M53.0612 34.7142V42.2621C53.0612 45.3888 50.527 47.923 47.4003 47.923C44.2735 47.923 41.7393 45.3888 41.7393 42.2621V32.8272H51.1742C52.2167 32.8272 53.0612 33.6717 53.0612 34.7142ZM47.4003 29.0533C49.4844 29.0533 51.1742 27.3635 51.1742 25.2794C51.1742 23.1952 49.4844 21.5054 47.4003 21.5054C45.3161 21.5054 43.6263 23.1952 43.6263 25.2794C43.6263 27.3635 45.3161 29.0533 47.4003 29.0533Z"
|
||||
fill="#5059C9"
|
||||
/>
|
||||
<path
|
||||
d="M44.5698 34.7142V45.0925C44.5698 50.511 40.0024 54.8632 34.5066 54.5066C29.492 54.182 25.7001 49.7939 25.7001 44.7689V32.8272H42.6828C43.7254 32.8272 44.5698 33.6717 44.5698 34.7142ZM35.135 29.9968C38.2617 29.9968 40.7959 27.4626 40.7959 24.3359C40.7959 21.2092 38.2617 18.675 35.135 18.675C32.0083 18.675 29.4741 21.2092 29.4741 24.3359C29.4741 27.4626 32.0083 29.9968 35.135 29.9968Z"
|
||||
fill="#7B83EB"
|
||||
/>
|
||||
<path
|
||||
d="M35.135 29.9968C38.2614 29.9968 40.7959 27.4623 40.7959 24.3359C40.7959 21.2095 38.2614 18.675 35.135 18.675C32.0085 18.675 29.4741 21.2095 29.4741 24.3359C29.4741 27.4623 32.0085 29.9968 35.135 29.9968Z"
|
||||
fill="#7B83EB"
|
||||
/>
|
||||
<path
|
||||
opacity="0.05"
|
||||
d="M36.0785 45.3935V32.8273H25.7001V44.7689C25.7001 46.2162 26.0237 47.6069 26.5908 48.8665H32.6045C34.5236 48.8665 36.0785 47.3116 36.0785 45.3935Z"
|
||||
fill="black"
|
||||
/>
|
||||
<path
|
||||
opacity="0.07"
|
||||
d="M25.7001 32.8273V44.7689C25.7001 45.8634 25.8898 46.9239 26.2228 47.923H32.5045C34.1311 47.923 35.4492 46.605 35.4492 44.9784V32.8273H25.7001Z"
|
||||
fill="black"
|
||||
/>
|
||||
<path
|
||||
opacity="0.09"
|
||||
d="M34.8208 32.8273H25.7001V44.7689C25.7001 45.5256 25.7954 46.2634 25.9586 46.9795H32.4045C33.7386 46.9795 34.8198 45.8983 34.8198 44.5642L34.8208 32.8273Z"
|
||||
fill="black"
|
||||
/>
|
||||
<path
|
||||
d="M32.3045 46.036H17.2088C16.1662 46.036 15.3218 45.1916 15.3218 44.149V29.0533C15.3218 28.0107 16.1662 27.1663 17.2088 27.1663H32.3045C33.3471 27.1663 34.1915 28.0107 34.1915 29.0533V44.149C34.1915 45.1916 33.3471 46.036 32.3045 46.036Z"
|
||||
fill="url(#paint0_linear_2711_141106)"
|
||||
/>
|
||||
<path
|
||||
d="M28.5947 31.8828H20.9185V33.5056H23.7933V41.3176H25.7199V33.5056H28.5947V31.8828Z"
|
||||
fill="#141414"
|
||||
/>
|
||||
</g>
|
||||
<g filter="url(#filter1_d_2711_141106)">
|
||||
<rect
|
||||
x="58.1724"
|
||||
y="1"
|
||||
width="60.3829"
|
||||
height="60.3829"
|
||||
rx="12.5798"
|
||||
transform="rotate(11.4919 58.1724 1)"
|
||||
fill="#141414"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<rect
|
||||
x="58.2951"
|
||||
y="1.18542"
|
||||
width="60.0685"
|
||||
height="60.0685"
|
||||
rx="12.4225"
|
||||
transform="rotate(11.4919 58.2951 1.18542)"
|
||||
stroke="#414141"
|
||||
stroke-width="0.314495"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<g clip-path="url(#clip0_2711_141106)">
|
||||
<path
|
||||
d="M72.1525 26.9491L69.145 41.7422L83.9381 44.7497L86.9456 29.9566L72.1525 26.9491Z"
|
||||
fill="#141414"
|
||||
/>
|
||||
<path
|
||||
d="M63.6434 26.1819L61.0118 39.1259L65.4467 40.9903L70.2575 41.0056L72.8891 28.0616L68.4542 26.1972L63.6434 26.1819Z"
|
||||
fill="#1E88E5"
|
||||
/>
|
||||
<path
|
||||
d="M93.763 39.0449L91.1314 51.9889C90.8199 53.5209 89.3258 54.5101 87.7938 54.1987L68.3778 50.2513L68.3931 45.4405L70.2575 41.0056L83.2015 43.6372L84.5173 37.1652L89.3281 37.1805L93.763 39.0449Z"
|
||||
fill="#4CAF50"
|
||||
/>
|
||||
<path
|
||||
d="M96.3945 26.1009L93.763 39.0448L84.5173 37.1652L85.8331 30.6932L72.8891 28.0616L72.9044 23.2508L74.7688 18.8159L94.1847 22.7633C95.7167 23.0747 96.706 24.5689 96.3945 26.1009Z"
|
||||
fill="#FBC02D"
|
||||
/>
|
||||
<path
|
||||
d="M70.2575 41.0056L68.3778 50.2513L61.9058 48.9355C60.3738 48.6241 59.3846 47.1299 59.696 45.5979L61.0118 39.1259L70.2575 41.0056Z"
|
||||
fill="#1565C0"
|
||||
/>
|
||||
<path
|
||||
d="M74.7688 18.8159L72.8891 28.0616L63.6434 26.1819L74.7688 18.8159Z"
|
||||
fill="#E53935"
|
||||
/>
|
||||
<path
|
||||
d="M94.6875 39.2328L92.1746 46.8575L84.5172 37.1652L95.3513 31.2322L94.6875 39.2328Z"
|
||||
fill="#2E7D32"
|
||||
/>
|
||||
<path
|
||||
d="M104.695 27.8943L99.4731 53.5789C99.3152 54.3555 98.3208 54.6058 97.8195 53.9936L92.1746 46.8575L95.3513 31.2323L103.334 26.8668C104.035 26.4989 104.853 27.1177 104.695 27.8943Z"
|
||||
fill="#4CAF50"
|
||||
/>
|
||||
</g>
|
||||
</g>
|
||||
<g filter="url(#filter2_d_2711_141106)">
|
||||
<rect
|
||||
x="94.0625"
|
||||
y="10.5756"
|
||||
width="60.3829"
|
||||
height="60.3829"
|
||||
rx="12.5798"
|
||||
transform="rotate(-7.44376 94.0625 10.5756)"
|
||||
fill="#141414"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<rect
|
||||
x="94.2388"
|
||||
y="10.7111"
|
||||
width="60.0685"
|
||||
height="60.0685"
|
||||
rx="12.4225"
|
||||
transform="rotate(-7.44376 94.2388 10.7111)"
|
||||
stroke="#414141"
|
||||
stroke-width="0.314495"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<path
|
||||
d="M130.356 55.3119C140.689 53.9618 147.972 44.4902 146.622 34.1566C145.271 23.823 135.8 16.5405 125.466 17.8906C115.133 19.2407 107.85 28.7122 109.2 39.0459C110.55 49.3795 120.022 56.662 130.356 55.3119Z"
|
||||
fill="#2196F3"
|
||||
/>
|
||||
<path
|
||||
d="M133.444 42.5388L119.411 44.3722C117.861 44.5748 116.44 43.4825 116.238 41.9323L114.893 31.6415L128.926 29.808C130.477 29.6055 131.897 30.6977 132.1 32.2479L133.444 42.5388Z"
|
||||
fill="#141414"
|
||||
/>
|
||||
<path
|
||||
d="M140.928 41.5609L134.826 38.5522L134.093 32.939L139.217 28.4635L140.928 41.5609Z"
|
||||
fill="#141414"
|
||||
/>
|
||||
</g>
|
||||
<g filter="url(#filter3_d_2711_141106)">
|
||||
<rect
|
||||
x="145.523"
|
||||
y="6.40973"
|
||||
width="60.3829"
|
||||
height="60.3829"
|
||||
rx="12.5798"
|
||||
fill="#141414"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<rect
|
||||
x="145.68"
|
||||
y="6.56698"
|
||||
width="60.0685"
|
||||
height="60.0685"
|
||||
rx="12.4225"
|
||||
stroke="#414141"
|
||||
stroke-width="0.314495"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<path
|
||||
d="M176.658 41.3186C176.658 43.3943 178.356 45.0925 180.432 45.0925H189.867C191.942 45.0925 193.64 43.3943 193.64 41.3186C193.64 39.2429 191.942 37.5447 189.867 37.5447H180.432C178.356 37.5447 176.658 39.2429 176.658 41.3186Z"
|
||||
fill="#F5BC00"
|
||||
/>
|
||||
<path
|
||||
d="M176.658 46.9795V50.7534C176.658 52.8291 178.356 54.5274 180.432 54.5274C182.507 54.5274 184.206 52.8291 184.206 50.7534C184.206 48.6778 182.507 46.9795 180.432 46.9795H176.658Z"
|
||||
fill="#F5BC00"
|
||||
/>
|
||||
<path
|
||||
d="M170.997 37.5447C168.921 37.5447 167.223 39.2429 167.223 41.3186V50.7534C167.223 52.8291 168.921 54.5274 170.997 54.5274C173.073 54.5274 174.771 52.8291 174.771 50.7534V41.3186C174.771 39.2429 173.073 37.5447 170.997 37.5447Z"
|
||||
fill="#F55376"
|
||||
/>
|
||||
<path
|
||||
d="M165.336 37.5447H161.562C159.486 37.5447 157.788 39.2429 157.788 41.3186C157.788 43.3943 159.486 45.0925 161.562 45.0925C163.638 45.0925 165.336 43.3943 165.336 41.3186V37.5447Z"
|
||||
fill="#F55376"
|
||||
/>
|
||||
<path
|
||||
d="M174.771 31.8838C174.771 29.8081 173.073 28.1099 170.997 28.1099H161.562C159.486 28.1099 157.788 29.8081 157.788 31.8838C157.788 33.9595 159.486 35.6577 161.562 35.6577H170.997C173.073 35.6577 174.771 33.9595 174.771 31.8838Z"
|
||||
fill="#00B3D7"
|
||||
/>
|
||||
<path
|
||||
d="M174.771 26.2229V22.4489C174.771 20.3733 173.073 18.675 170.997 18.675C168.921 18.675 167.223 20.3733 167.223 22.4489C167.223 24.5246 168.921 26.2229 170.997 26.2229H174.771Z"
|
||||
fill="#00B3D7"
|
||||
/>
|
||||
<path
|
||||
d="M180.432 35.6577C182.507 35.6577 184.206 33.9594 184.206 31.8838V22.4489C184.206 20.3733 182.507 18.675 180.432 18.675C178.356 18.675 176.658 20.3733 176.658 22.4489V31.8838C176.658 33.9594 178.356 35.6577 180.432 35.6577Z"
|
||||
fill="#00B569"
|
||||
/>
|
||||
<path
|
||||
d="M186.093 35.6577H189.867C191.942 35.6577 193.64 33.9595 193.64 31.8838C193.64 29.8081 191.942 28.1099 189.867 28.1099C187.791 28.1099 186.093 29.8081 186.093 31.8838V35.6577Z"
|
||||
fill="#00B569"
|
||||
/>
|
||||
</g>
|
||||
<g filter="url(#filter4_d_2711_141106)">
|
||||
<rect
|
||||
x="199.615"
|
||||
y="6.40973"
|
||||
width="60.3829"
|
||||
height="60.3829"
|
||||
rx="12.5798"
|
||||
fill="#141414"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<rect
|
||||
x="199.772"
|
||||
y="6.56698"
|
||||
width="60.0685"
|
||||
height="60.0685"
|
||||
rx="12.4225"
|
||||
stroke="#414141"
|
||||
stroke-width="0.314495"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<path
|
||||
d="M232.297 43.1396L229.939 48.3759C229.023 49.5552 227.835 50.5082 226.486 51.1403C225.136 51.8007 223.664 52.1593 222.164 52.197C215.937 52.3197 213.041 46.7154 213.041 46.7154C209.522 40.9129 208.474 33.2613 208.229 30.7988C208.163 30.5157 208.116 30.2233 208.106 29.9308C208.097 29.176 208.305 28.4212 208.729 27.7796C209.088 27.1192 209.635 26.5814 210.295 26.2135C211.003 25.8738 211.786 25.704 212.579 25.7229C213.314 25.7512 214.041 25.9587 214.673 26.3361C215.154 26.6286 215.569 27.006 215.909 27.4494C216.419 28.308 216.683 29.2892 216.692 30.2893C216.937 32.4782 217.371 34.6388 217.985 36.7616C218.456 38.4504 219.117 40.0827 219.957 41.63C220.268 42.3376 220.759 42.9509 221.372 43.4132L221.749 43.6019C222.74 43.7906 223.287 42.9792 223.664 42.3093C224.155 41.1394 224.589 39.9506 224.957 38.7335C225.014 38.4882 225.08 38.2995 225.146 38.0542C225.268 37.6296 225.372 37.1956 225.448 36.7616L227.429 31.4498L232.297 43.1396Z"
|
||||
fill="url(#paint1_linear_2711_141106)"
|
||||
/>
|
||||
<path
|
||||
d="M237.595 21.0063C236.082 21.0167 234.588 21.3535 233.217 21.9932C231.854 22.6744 230.671 23.667 229.763 24.8907L226.99 32.347L232.418 42.7716L234.266 36.8503L234.447 35.9257C234.811 34.3651 235.306 32.8376 235.927 31.3592C236.123 30.7497 236.487 30.2063 236.976 29.793L237.038 29.7307C237.485 29.5109 238.02 29.5826 238.393 29.9109C238.624 30.0713 238.815 30.2827 238.949 30.5299C239.137 30.7723 239.255 31.0233 239.442 31.2658C239.741 31.7677 240.003 32.2914 240.225 32.832C240.431 33.2707 240.675 33.6896 240.954 34.0849C240.989 34.0849 241.016 34.1132 241.016 34.1472C241.438 34.6029 241.94 34.9765 242.496 35.2511C243.044 35.5473 243.66 35.6964 244.282 35.6822C244.852 35.6775 245.416 35.5747 245.95 35.3765C246.484 35.1756 246.968 34.8605 247.369 34.4519C247.731 34.017 248.041 33.5415 248.293 33.0339C248.481 32.497 248.584 31.9338 248.599 31.3658C248.6 30.7516 248.474 30.144 248.231 29.5798C248.231 29.5798 246.563 25.2643 243.664 23.1028C241.933 21.747 239.796 21.0082 237.595 21.0063Z"
|
||||
fill="url(#paint2_radial_2711_141106)"
|
||||
/>
|
||||
<path
|
||||
d="M221.375 21.0063C221.004 21.0252 220.636 21.0667 220.271 21.1318C217.46 21.7008 215.008 23.4 213.488 25.8313C213.901 25.9304 214.296 26.0974 214.655 26.3248C215.137 26.6106 215.557 26.988 215.893 27.4371C216.403 28.2957 216.672 29.2741 216.676 30.2723C216.935 32.414 217.349 34.534 217.914 36.6163C218.504 34.3293 219.484 32.1621 220.811 30.21C220.966 29.9779 221.177 29.7864 221.422 29.6543C221.553 29.577 221.701 29.5336 221.853 29.5288C222.113 29.5241 222.37 29.5892 222.597 29.7166C222.66 29.7166 222.66 29.7789 222.723 29.7789C222.921 29.9685 223.104 30.1723 223.271 30.3893C223.598 30.9893 223.889 31.6092 224.14 32.2451C224.633 33.6 225.065 35.3228 225.065 35.3228L226.294 40.2572C226.724 41.9621 227.282 43.632 227.962 45.2539C229.874 49.6316 232.771 50.8619 232.771 50.8619C234.202 51.6063 235.78 52.0262 237.392 52.0913C238.927 52.1639 240.455 51.846 241.833 51.1667C243.346 50.411 244.68 49.3429 245.75 48.0343C246.394 47.155 246.97 46.2285 247.472 45.2614C248.628 42.9848 249.519 40.5827 250.127 38.1032C250.55 36.5578 250.879 34.9888 251.114 33.4037C251.24 32.6206 251.357 31.8375 251.42 31.0544C251.556 30.3195 251.534 29.5637 251.358 28.8382C251.303 28.7127 251.303 28.5872 251.24 28.4627C250.864 27.5494 250.191 26.7908 249.328 26.3087C248.708 25.8926 247.975 25.6775 247.229 25.6898C246.876 25.6964 246.524 25.7389 246.18 25.8153C246.977 26.9786 247.658 28.2164 248.216 29.5119C248.459 30.0761 248.585 30.6837 248.584 31.2979C248.569 31.8668 248.466 32.4291 248.278 32.9659C248.026 33.4726 247.717 33.9491 247.354 34.384C246.972 34.8142 246.483 35.1331 245.935 35.3086C245.401 35.5086 244.837 35.6143 244.267 35.6219C243.504 35.636 242.753 35.4199 242.113 35.0029L241.675 36.6635C241.345 37.94 240.892 39.1807 240.32 40.3676C240.014 41.0959 239.645 41.796 239.216 42.4583C238.935 42.915 238.527 43.2801 238.041 43.5075C237.861 43.5594 237.672 43.5801 237.486 43.5698C237.286 43.565 237.091 43.499 236.93 43.382C236.604 43.1093 236.338 42.7735 236.147 42.3951C235.898 41.9885 235.673 41.5677 235.473 41.1346C235.105 40.21 234.486 37.9315 234.486 37.9315L233.907 35.4954L233.288 33.0914L232.857 31.4856C232.338 29.2807 231.417 27.1918 230.139 25.3218C228.895 23.5509 227.129 22.2149 225.087 21.4998C224.284 21.2101 223.442 21.0431 222.589 21.0063H221.375Z"
|
||||
fill="url(#paint3_linear_2711_141106)"
|
||||
/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter
|
||||
id="filter0_d_2711_141106"
|
||||
x="0.226066"
|
||||
y="3.26478"
|
||||
width="67.9308"
|
||||
height="67.9308"
|
||||
filterUnits="userSpaceOnUse"
|
||||
color-interpolation-filters="sRGB"
|
||||
>
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
/>
|
||||
<feOffset dy="0.628989" />
|
||||
<feGaussianBlur stdDeviation="1.88697" />
|
||||
<feComposite in2="hardAlpha" operator="out" />
|
||||
<feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in2="BackgroundImageFix"
|
||||
result="effect1_dropShadow_2711_141106"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_2711_141106"
|
||||
result="shape"
|
||||
/>
|
||||
</filter>
|
||||
<filter
|
||||
id="filter1_d_2711_141106"
|
||||
x="42.3684"
|
||||
y="-2.14495"
|
||||
width="78.7503"
|
||||
height="78.7504"
|
||||
filterUnits="userSpaceOnUse"
|
||||
color-interpolation-filters="sRGB"
|
||||
>
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
/>
|
||||
<feOffset dy="0.628989" />
|
||||
<feGaussianBlur stdDeviation="1.88697" />
|
||||
<feComposite in2="hardAlpha" operator="out" />
|
||||
<feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in2="BackgroundImageFix"
|
||||
result="effect1_dropShadow_2711_141106"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_2711_141106"
|
||||
result="shape"
|
||||
/>
|
||||
</filter>
|
||||
<filter
|
||||
id="filter2_d_2711_141106"
|
||||
x="90.2886"
|
||||
y="-0.392199"
|
||||
width="75.2447"
|
||||
height="75.2448"
|
||||
filterUnits="userSpaceOnUse"
|
||||
color-interpolation-filters="sRGB"
|
||||
>
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
/>
|
||||
<feOffset dy="0.628989" />
|
||||
<feGaussianBlur stdDeviation="1.88697" />
|
||||
<feComposite in2="hardAlpha" operator="out" />
|
||||
<feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in2="BackgroundImageFix"
|
||||
result="effect1_dropShadow_2711_141106"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_2711_141106"
|
||||
result="shape"
|
||||
/>
|
||||
</filter>
|
||||
<filter
|
||||
id="filter3_d_2711_141106"
|
||||
x="141.749"
|
||||
y="3.26478"
|
||||
width="67.9308"
|
||||
height="67.9308"
|
||||
filterUnits="userSpaceOnUse"
|
||||
color-interpolation-filters="sRGB"
|
||||
>
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
/>
|
||||
<feOffset dy="0.628989" />
|
||||
<feGaussianBlur stdDeviation="1.88697" />
|
||||
<feComposite in2="hardAlpha" operator="out" />
|
||||
<feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in2="BackgroundImageFix"
|
||||
result="effect1_dropShadow_2711_141106"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_2711_141106"
|
||||
result="shape"
|
||||
/>
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4_d_2711_141106"
|
||||
x="195.841"
|
||||
y="3.26478"
|
||||
width="67.9308"
|
||||
height="67.9308"
|
||||
filterUnits="userSpaceOnUse"
|
||||
color-interpolation-filters="sRGB"
|
||||
>
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
/>
|
||||
<feOffset dy="0.628989" />
|
||||
<feGaussianBlur stdDeviation="1.88697" />
|
||||
<feComposite in2="hardAlpha" operator="out" />
|
||||
<feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in2="BackgroundImageFix"
|
||||
result="effect1_dropShadow_2711_141106"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_2711_141106"
|
||||
result="shape"
|
||||
/>
|
||||
</filter>
|
||||
<linearGradient
|
||||
id="paint0_linear_2711_141106"
|
||||
x1="15.9332"
|
||||
y1="27.7777"
|
||||
x2="33.6282"
|
||||
y2="45.4727"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stop-color="#5961C3" />
|
||||
<stop offset="1" stop-color="#3A41AC" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="paint1_linear_2711_141106"
|
||||
x1="231.225"
|
||||
y1="38.9599"
|
||||
x2="207.79"
|
||||
y2="38.9599"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stop-color="#0C63AD" />
|
||||
<stop offset="1" stop-color="#50E6FF" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
id="paint2_radial_2711_141106"
|
||||
cx="0"
|
||||
cy="0"
|
||||
r="1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(232.074 35.2568) scale(20.5811 23.1641)"
|
||||
>
|
||||
<stop stop-color="#185C37" />
|
||||
<stop offset="0.661" stop-color="#30DC80" />
|
||||
<stop offset="1" stop-color="#5EEE5C" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="paint3_linear_2711_141106"
|
||||
x1="208.664"
|
||||
y1="40.2808"
|
||||
x2="257"
|
||||
y2="31.7583"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stop-color="#103F8D" />
|
||||
<stop offset="0.494" stop-color="#2F64F7" />
|
||||
<stop offset="1" stop-color="#11408B" />
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_2711_141106">
|
||||
<rect
|
||||
width="45.2872"
|
||||
height="45.2872"
|
||||
fill="white"
|
||||
transform="translate(64.0652 9.90033) rotate(11.4919)"
|
||||
/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 19 KiB |
@@ -0,0 +1,473 @@
|
||||
<svg
|
||||
width="264"
|
||||
height="75"
|
||||
viewBox="0 0 264 75"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<g filter="url(#filter0_d_2711_139973)">
|
||||
<rect
|
||||
x="4"
|
||||
y="6.40975"
|
||||
width="60.3829"
|
||||
height="60.3829"
|
||||
rx="12.5798"
|
||||
fill="white"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<rect
|
||||
x="4.15725"
|
||||
y="6.567"
|
||||
width="60.0685"
|
||||
height="60.0685"
|
||||
rx="12.4225"
|
||||
stroke="#E6E6E6"
|
||||
stroke-width="0.314495"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<path
|
||||
d="M53.0612 34.7143V42.2621C53.0612 45.3888 50.527 47.923 47.4003 47.923C44.2735 47.923 41.7393 45.3888 41.7393 42.2621V32.8273H51.1742C52.2167 32.8273 53.0612 33.6717 53.0612 34.7143ZM47.4003 29.0534C49.4844 29.0534 51.1742 27.3636 51.1742 25.2794C51.1742 23.1953 49.4844 21.5055 47.4003 21.5055C45.3161 21.5055 43.6263 23.1953 43.6263 25.2794C43.6263 27.3636 45.3161 29.0534 47.4003 29.0534Z"
|
||||
fill="#5059C9"
|
||||
/>
|
||||
<path
|
||||
d="M44.5698 34.7143V45.0926C44.5698 50.511 40.0024 54.8633 34.5066 54.5067C29.492 54.1821 25.7001 49.794 25.7001 44.769V32.8273H42.6828C43.7254 32.8273 44.5698 33.6717 44.5698 34.7143ZM35.135 29.9968C38.2617 29.9968 40.7959 27.4626 40.7959 24.3359C40.7959 21.2092 38.2617 18.675 35.135 18.675C32.0083 18.675 29.4741 21.2092 29.4741 24.3359C29.4741 27.4626 32.0083 29.9968 35.135 29.9968Z"
|
||||
fill="#7B83EB"
|
||||
/>
|
||||
<path
|
||||
d="M35.135 29.9968C38.2614 29.9968 40.7959 27.4624 40.7959 24.3359C40.7959 21.2095 38.2614 18.675 35.135 18.675C32.0085 18.675 29.4741 21.2095 29.4741 24.3359C29.4741 27.4624 32.0085 29.9968 35.135 29.9968Z"
|
||||
fill="#7B83EB"
|
||||
/>
|
||||
<path
|
||||
opacity="0.05"
|
||||
d="M36.0785 45.3936V32.8273H25.7001V44.769C25.7001 46.2163 26.0237 47.607 26.5908 48.8665H32.6045C34.5236 48.8665 36.0785 47.3117 36.0785 45.3936Z"
|
||||
fill="black"
|
||||
/>
|
||||
<path
|
||||
opacity="0.07"
|
||||
d="M25.7001 32.8273V44.769C25.7001 45.8634 25.8898 46.9239 26.2228 47.923H32.5045C34.1311 47.923 35.4492 46.605 35.4492 44.9784V32.8273H25.7001Z"
|
||||
fill="black"
|
||||
/>
|
||||
<path
|
||||
opacity="0.09"
|
||||
d="M34.8208 32.8273H25.7001V44.769C25.7001 45.5256 25.7954 46.2634 25.9586 46.9795H32.4045C33.7386 46.9795 34.8198 45.8983 34.8198 44.5642L34.8208 32.8273Z"
|
||||
fill="black"
|
||||
/>
|
||||
<path
|
||||
d="M32.3045 46.0361H17.2088C16.1662 46.0361 15.3218 45.1917 15.3218 44.1491V29.0534C15.3218 28.0108 16.1662 27.1664 17.2088 27.1664H32.3045C33.3471 27.1664 34.1915 28.0108 34.1915 29.0534V44.1491C34.1915 45.1917 33.3471 46.0361 32.3045 46.0361Z"
|
||||
fill="url(#paint0_linear_2711_139973)"
|
||||
/>
|
||||
<path
|
||||
d="M28.5948 31.8829H20.9186V33.5056H23.7934V41.3177H25.72V33.5056H28.5948V31.8829Z"
|
||||
fill="white"
|
||||
/>
|
||||
</g>
|
||||
<g filter="url(#filter1_d_2711_139973)">
|
||||
<rect
|
||||
x="58.1724"
|
||||
y="1"
|
||||
width="60.3829"
|
||||
height="60.3829"
|
||||
rx="12.5798"
|
||||
transform="rotate(11.4919 58.1724 1)"
|
||||
fill="white"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<rect
|
||||
x="58.2951"
|
||||
y="1.18542"
|
||||
width="60.0685"
|
||||
height="60.0685"
|
||||
rx="12.4225"
|
||||
transform="rotate(11.4919 58.2951 1.18542)"
|
||||
stroke="#E6E6E6"
|
||||
stroke-width="0.314495"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<g clip-path="url(#clip0_2711_139973)">
|
||||
<path
|
||||
d="M72.1525 26.949L69.145 41.7422L83.9381 44.7497L86.9456 29.9566L72.1525 26.949Z"
|
||||
fill="white"
|
||||
/>
|
||||
<path
|
||||
d="M63.6434 26.1819L61.0118 39.1259L65.4467 40.9903L70.2575 41.0056L72.8891 28.0616L68.4542 26.1972L63.6434 26.1819Z"
|
||||
fill="#1E88E5"
|
||||
/>
|
||||
<path
|
||||
d="M93.763 39.0448L91.1314 51.9888C90.8199 53.5208 89.3258 54.5101 87.7938 54.1986L68.3778 50.2513L68.3931 45.4404L70.2575 41.0056L83.2015 43.6371L84.5173 37.1652L89.3281 37.1804L93.763 39.0448Z"
|
||||
fill="#4CAF50"
|
||||
/>
|
||||
<path
|
||||
d="M96.3945 26.1009L93.763 39.0448L84.5173 37.1652L85.8331 30.6932L72.8891 28.0616L72.9044 23.2508L74.7688 18.8159L94.1847 22.7633C95.7167 23.0747 96.706 24.5689 96.3945 26.1009Z"
|
||||
fill="#FBC02D"
|
||||
/>
|
||||
<path
|
||||
d="M70.2575 41.0056L68.3778 50.2513L61.9058 48.9355C60.3738 48.624 59.3846 47.1299 59.696 45.5979L61.0118 39.1259L70.2575 41.0056Z"
|
||||
fill="#1565C0"
|
||||
/>
|
||||
<path
|
||||
d="M74.7688 18.8159L72.8891 28.0616L63.6434 26.1819L74.7688 18.8159Z"
|
||||
fill="#E53935"
|
||||
/>
|
||||
<path
|
||||
d="M94.6875 39.2328L92.1746 46.8575L84.5173 37.1652L95.3513 31.2322L94.6875 39.2328Z"
|
||||
fill="#2E7D32"
|
||||
/>
|
||||
<path
|
||||
d="M104.695 27.8943L99.4732 53.5788C99.3153 54.3555 98.3209 54.6058 97.8195 53.9936L92.1746 46.8575L95.3513 31.2322L103.335 26.8667C104.035 26.4989 104.853 27.1177 104.695 27.8943Z"
|
||||
fill="#4CAF50"
|
||||
/>
|
||||
</g>
|
||||
</g>
|
||||
<g filter="url(#filter2_d_2711_139973)">
|
||||
<rect
|
||||
x="94.0625"
|
||||
y="10.5756"
|
||||
width="60.3829"
|
||||
height="60.3829"
|
||||
rx="12.5798"
|
||||
transform="rotate(-7.44376 94.0625 10.5756)"
|
||||
fill="white"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<rect
|
||||
x="94.2388"
|
||||
y="10.7111"
|
||||
width="60.0685"
|
||||
height="60.0685"
|
||||
rx="12.4225"
|
||||
transform="rotate(-7.44376 94.2388 10.7111)"
|
||||
stroke="#E6E6E6"
|
||||
stroke-width="0.314495"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<path
|
||||
d="M130.356 55.3119C140.689 53.9618 147.972 44.4902 146.622 34.1566C145.271 23.823 135.8 16.5405 125.466 17.8906C115.133 19.2407 107.85 28.7122 109.2 39.0459C110.55 49.3795 120.022 56.662 130.356 55.3119Z"
|
||||
fill="#2196F3"
|
||||
/>
|
||||
<path
|
||||
d="M133.444 42.5388L119.411 44.3723C117.861 44.5748 116.44 43.4825 116.238 41.9324L114.893 31.6415L128.926 29.808C130.477 29.6055 131.897 30.6978 132.1 32.2479L133.444 42.5388Z"
|
||||
fill="white"
|
||||
/>
|
||||
<path
|
||||
d="M140.928 41.561L134.826 38.5522L134.093 32.939L139.217 28.4635L140.928 41.561Z"
|
||||
fill="white"
|
||||
/>
|
||||
</g>
|
||||
<g filter="url(#filter3_d_2711_139973)">
|
||||
<rect
|
||||
x="145.523"
|
||||
y="6.40975"
|
||||
width="60.3829"
|
||||
height="60.3829"
|
||||
rx="12.5798"
|
||||
fill="white"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<rect
|
||||
x="145.68"
|
||||
y="6.567"
|
||||
width="60.0685"
|
||||
height="60.0685"
|
||||
rx="12.4225"
|
||||
stroke="#E6E6E6"
|
||||
stroke-width="0.314495"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<path
|
||||
d="M176.658 41.3186C176.658 43.3943 178.356 45.0926 180.432 45.0926H189.867C191.942 45.0926 193.64 43.3943 193.64 41.3186C193.64 39.243 191.942 37.5447 189.867 37.5447H180.432C178.356 37.5447 176.658 39.243 176.658 41.3186Z"
|
||||
fill="#F5BC00"
|
||||
/>
|
||||
<path
|
||||
d="M176.658 46.9796V50.7535C176.658 52.8292 178.356 54.5274 180.432 54.5274C182.507 54.5274 184.206 52.8292 184.206 50.7535C184.206 48.6778 182.507 46.9796 180.432 46.9796H176.658Z"
|
||||
fill="#F5BC00"
|
||||
/>
|
||||
<path
|
||||
d="M170.997 37.5447C168.921 37.5447 167.223 39.243 167.223 41.3186V50.7535C167.223 52.8291 168.921 54.5274 170.997 54.5274C173.073 54.5274 174.771 52.8291 174.771 50.7535V41.3186C174.771 39.243 173.073 37.5447 170.997 37.5447Z"
|
||||
fill="#F55376"
|
||||
/>
|
||||
<path
|
||||
d="M165.336 37.5447H161.562C159.486 37.5447 157.788 39.243 157.788 41.3186C157.788 43.3943 159.486 45.0926 161.562 45.0926C163.638 45.0926 165.336 43.3943 165.336 41.3186V37.5447Z"
|
||||
fill="#F55376"
|
||||
/>
|
||||
<path
|
||||
d="M174.771 31.8838C174.771 29.8081 173.073 28.1099 170.997 28.1099H161.562C159.486 28.1099 157.788 29.8081 157.788 31.8838C157.788 33.9595 159.486 35.6577 161.562 35.6577H170.997C173.073 35.6577 174.771 33.9595 174.771 31.8838Z"
|
||||
fill="#00B3D7"
|
||||
/>
|
||||
<path
|
||||
d="M174.771 26.2229V22.449C174.771 20.3733 173.073 18.675 170.997 18.675C168.921 18.675 167.223 20.3733 167.223 22.449C167.223 24.5246 168.921 26.2229 170.997 26.2229H174.771Z"
|
||||
fill="#00B3D7"
|
||||
/>
|
||||
<path
|
||||
d="M180.432 35.6577C182.507 35.6577 184.206 33.9595 184.206 31.8838V22.449C184.206 20.3733 182.507 18.675 180.432 18.675C178.356 18.675 176.658 20.3733 176.658 22.449V31.8838C176.658 33.9595 178.356 35.6577 180.432 35.6577Z"
|
||||
fill="#00B569"
|
||||
/>
|
||||
<path
|
||||
d="M186.093 35.6577H189.867C191.942 35.6577 193.64 33.9595 193.64 31.8838C193.64 29.8081 191.942 28.1099 189.867 28.1099C187.791 28.1099 186.093 29.8081 186.093 31.8838V35.6577Z"
|
||||
fill="#00B569"
|
||||
/>
|
||||
</g>
|
||||
<g filter="url(#filter4_d_2711_139973)">
|
||||
<rect
|
||||
x="199.615"
|
||||
y="6.40975"
|
||||
width="60.3829"
|
||||
height="60.3829"
|
||||
rx="12.5798"
|
||||
fill="white"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<rect
|
||||
x="199.772"
|
||||
y="6.567"
|
||||
width="60.0685"
|
||||
height="60.0685"
|
||||
rx="12.4225"
|
||||
stroke="#E6E6E6"
|
||||
stroke-width="0.314495"
|
||||
shape-rendering="crispEdges"
|
||||
/>
|
||||
<path
|
||||
d="M232.297 43.1396L229.939 48.3759C229.023 49.5553 227.835 50.5082 226.486 51.1403C225.136 51.8007 223.664 52.1593 222.164 52.197C215.937 52.3197 213.041 46.7154 213.041 46.7154C209.522 40.9129 208.474 33.2613 208.229 30.7988C208.163 30.5158 208.116 30.2233 208.106 29.9308C208.097 29.176 208.305 28.4212 208.729 27.7797C209.088 27.1192 209.635 26.5814 210.295 26.2135C211.003 25.8738 211.786 25.704 212.579 25.7229C213.314 25.7512 214.041 25.9587 214.673 26.3361C215.154 26.6286 215.569 27.006 215.909 27.4494C216.419 28.308 216.683 29.2892 216.692 30.2893C216.937 32.4782 217.371 34.6388 217.985 36.7616C218.456 38.4505 219.117 40.0827 219.957 41.63C220.268 42.3376 220.759 42.9509 221.372 43.4132L221.749 43.6019C222.74 43.7906 223.287 42.9792 223.664 42.3093C224.155 41.1394 224.589 39.9506 224.957 38.7335C225.014 38.4882 225.08 38.2995 225.146 38.0542C225.268 37.6296 225.372 37.1956 225.448 36.7616L227.429 31.4498L232.297 43.1396Z"
|
||||
fill="url(#paint1_linear_2711_139973)"
|
||||
/>
|
||||
<path
|
||||
d="M237.595 21.0064C236.082 21.0168 234.588 21.3536 233.217 21.9933C231.854 22.6745 230.671 23.667 229.763 24.8907L226.99 32.3471L232.418 42.7716L234.266 36.8503L234.447 35.9257C234.811 34.3652 235.306 32.8377 235.927 31.3592C236.123 30.7497 236.487 30.2063 236.976 29.793L237.038 29.7308C237.485 29.5109 238.02 29.5827 238.393 29.911C238.624 30.0714 238.815 30.2827 238.949 30.5299C239.137 30.7724 239.255 31.0233 239.442 31.2658C239.741 31.7678 240.003 32.2914 240.225 32.832C240.431 33.2707 240.675 33.6896 240.954 34.085C240.989 34.085 241.016 34.1133 241.016 34.1472C241.438 34.6029 241.94 34.9765 242.496 35.2511C243.044 35.5474 243.66 35.6964 244.282 35.6823C244.852 35.6776 245.416 35.5747 245.95 35.3766C246.484 35.1756 246.968 34.8605 247.369 34.452C247.731 34.017 248.041 33.5415 248.293 33.0339C248.481 32.4971 248.584 31.9338 248.599 31.3658C248.6 30.7516 248.474 30.144 248.231 29.5798C248.231 29.5798 246.563 25.2643 243.664 23.1028C241.933 21.747 239.796 21.0083 237.595 21.0064Z"
|
||||
fill="url(#paint2_radial_2711_139973)"
|
||||
/>
|
||||
<path
|
||||
d="M221.375 21.0064C221.004 21.0253 220.636 21.0668 220.271 21.1319C217.46 21.7008 215.008 23.4 213.488 25.8314C213.901 25.9304 214.296 26.0974 214.655 26.3248C215.137 26.6107 215.557 26.9881 215.893 27.4372C216.403 28.2957 216.672 29.2741 216.676 30.2723C216.935 32.414 217.349 34.5341 217.914 36.6163C218.504 34.3293 219.484 32.1621 220.811 30.2101C220.966 29.978 221.177 29.7864 221.422 29.6544C221.553 29.577 221.701 29.5336 221.853 29.5289C222.113 29.5242 222.37 29.5893 222.597 29.7166C222.66 29.7166 222.66 29.7789 222.723 29.7789C222.921 29.9685 223.104 30.1723 223.271 30.3893C223.598 30.9894 223.889 31.6093 224.14 32.2452C224.633 33.6 225.065 35.3228 225.065 35.3228L226.294 40.2572C226.724 41.9621 227.282 43.6321 227.962 45.2539C229.874 49.6317 232.771 50.862 232.771 50.862C234.202 51.6064 235.78 52.0262 237.392 52.0913C238.927 52.164 240.455 51.846 241.833 51.1667C243.346 50.411 244.68 49.343 245.75 48.0344C246.394 47.155 246.97 46.2285 247.472 45.2615C248.628 42.9848 249.519 40.5827 250.127 38.1032C250.55 36.5578 250.879 34.9888 251.114 33.4038C251.24 32.6207 251.357 31.8376 251.42 31.0545C251.556 30.3195 251.534 29.5638 251.358 28.8382C251.303 28.7128 251.303 28.5873 251.24 28.4627C250.864 27.5494 250.191 26.7909 249.328 26.3088C248.708 25.8927 247.975 25.6776 247.229 25.6898C246.876 25.6964 246.524 25.7389 246.18 25.8153C246.977 26.9786 247.658 28.2165 248.216 29.5119C248.459 30.0761 248.585 30.6837 248.584 31.2979C248.569 31.8668 248.466 32.4291 248.278 32.966C248.026 33.4726 247.717 33.9491 247.354 34.384C246.972 34.8143 246.483 35.1332 245.935 35.3087C245.401 35.5087 244.837 35.6143 244.267 35.6219C243.504 35.636 242.753 35.42 242.113 35.003L241.675 36.6635C241.345 37.94 240.892 39.1807 240.32 40.3676C240.014 41.096 239.645 41.796 239.216 42.4584C238.935 42.915 238.527 43.2801 238.041 43.5075C237.861 43.5594 237.672 43.5802 237.486 43.5698C237.286 43.5651 237.091 43.499 236.93 43.382C236.604 43.1094 236.338 42.7735 236.147 42.3952C235.898 41.9885 235.673 41.5677 235.473 41.1347C235.105 40.21 234.486 37.9315 234.486 37.9315L233.907 35.4955L233.288 33.0915L232.857 31.4857C232.338 29.2807 231.417 27.1919 230.139 25.3219C228.895 23.551 227.129 22.215 225.087 21.4998C224.284 21.2102 223.442 21.0432 222.589 21.0064H221.375Z"
|
||||
fill="url(#paint3_linear_2711_139973)"
|
||||
/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter
|
||||
id="filter0_d_2711_139973"
|
||||
x="0.226066"
|
||||
y="3.26481"
|
||||
width="67.9308"
|
||||
height="67.9308"
|
||||
filterUnits="userSpaceOnUse"
|
||||
color-interpolation-filters="sRGB"
|
||||
>
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
/>
|
||||
<feOffset dy="0.628989" />
|
||||
<feGaussianBlur stdDeviation="1.88697" />
|
||||
<feComposite in2="hardAlpha" operator="out" />
|
||||
<feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in2="BackgroundImageFix"
|
||||
result="effect1_dropShadow_2711_139973"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_2711_139973"
|
||||
result="shape"
|
||||
/>
|
||||
</filter>
|
||||
<filter
|
||||
id="filter1_d_2711_139973"
|
||||
x="42.3684"
|
||||
y="-2.14495"
|
||||
width="78.7503"
|
||||
height="78.7504"
|
||||
filterUnits="userSpaceOnUse"
|
||||
color-interpolation-filters="sRGB"
|
||||
>
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
/>
|
||||
<feOffset dy="0.628989" />
|
||||
<feGaussianBlur stdDeviation="1.88697" />
|
||||
<feComposite in2="hardAlpha" operator="out" />
|
||||
<feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in2="BackgroundImageFix"
|
||||
result="effect1_dropShadow_2711_139973"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_2711_139973"
|
||||
result="shape"
|
||||
/>
|
||||
</filter>
|
||||
<filter
|
||||
id="filter2_d_2711_139973"
|
||||
x="90.2886"
|
||||
y="-0.392137"
|
||||
width="75.2447"
|
||||
height="75.2447"
|
||||
filterUnits="userSpaceOnUse"
|
||||
color-interpolation-filters="sRGB"
|
||||
>
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
/>
|
||||
<feOffset dy="0.628989" />
|
||||
<feGaussianBlur stdDeviation="1.88697" />
|
||||
<feComposite in2="hardAlpha" operator="out" />
|
||||
<feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in2="BackgroundImageFix"
|
||||
result="effect1_dropShadow_2711_139973"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_2711_139973"
|
||||
result="shape"
|
||||
/>
|
||||
</filter>
|
||||
<filter
|
||||
id="filter3_d_2711_139973"
|
||||
x="141.749"
|
||||
y="3.26481"
|
||||
width="67.9308"
|
||||
height="67.9308"
|
||||
filterUnits="userSpaceOnUse"
|
||||
color-interpolation-filters="sRGB"
|
||||
>
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
/>
|
||||
<feOffset dy="0.628989" />
|
||||
<feGaussianBlur stdDeviation="1.88697" />
|
||||
<feComposite in2="hardAlpha" operator="out" />
|
||||
<feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in2="BackgroundImageFix"
|
||||
result="effect1_dropShadow_2711_139973"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_2711_139973"
|
||||
result="shape"
|
||||
/>
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4_d_2711_139973"
|
||||
x="195.841"
|
||||
y="3.26481"
|
||||
width="67.9308"
|
||||
height="67.9308"
|
||||
filterUnits="userSpaceOnUse"
|
||||
color-interpolation-filters="sRGB"
|
||||
>
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
/>
|
||||
<feOffset dy="0.628989" />
|
||||
<feGaussianBlur stdDeviation="1.88697" />
|
||||
<feComposite in2="hardAlpha" operator="out" />
|
||||
<feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in2="BackgroundImageFix"
|
||||
result="effect1_dropShadow_2711_139973"
|
||||
/>
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_2711_139973"
|
||||
result="shape"
|
||||
/>
|
||||
</filter>
|
||||
<linearGradient
|
||||
id="paint0_linear_2711_139973"
|
||||
x1="15.9332"
|
||||
y1="27.7778"
|
||||
x2="33.6282"
|
||||
y2="45.4728"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stop-color="#5961C3" />
|
||||
<stop offset="1" stop-color="#3A41AC" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="paint1_linear_2711_139973"
|
||||
x1="231.225"
|
||||
y1="38.9599"
|
||||
x2="207.79"
|
||||
y2="38.9599"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stop-color="#0C63AD" />
|
||||
<stop offset="1" stop-color="#50E6FF" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
id="paint2_radial_2711_139973"
|
||||
cx="0"
|
||||
cy="0"
|
||||
r="1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(232.074 35.2568) scale(20.5811 23.1641)"
|
||||
>
|
||||
<stop stop-color="#185C37" />
|
||||
<stop offset="0.661" stop-color="#30DC80" />
|
||||
<stop offset="1" stop-color="#5EEE5C" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="paint3_linear_2711_139973"
|
||||
x1="208.664"
|
||||
y1="40.2808"
|
||||
x2="257"
|
||||
y2="31.7583"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stop-color="#103F8D" />
|
||||
<stop offset="0.494" stop-color="#2F64F7" />
|
||||
<stop offset="1" stop-color="#11408B" />
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_2711_139973">
|
||||
<rect
|
||||
width="45.2872"
|
||||
height="45.2872"
|
||||
fill="white"
|
||||
transform="translate(64.0652 9.90031) rotate(11.4919)"
|
||||
/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 19 KiB |
@@ -0,0 +1,49 @@
|
||||
import { useConfirmModal } from '@affine/component';
|
||||
import { useAsyncCallback } from '@affine/core/components/hooks/affine-async-hooks';
|
||||
import { MeetingSettingsService } from '@affine/core/modules/media/services/meeting-settings';
|
||||
import { useI18n } from '@affine/i18n';
|
||||
import track from '@affine/track';
|
||||
import { useService } from '@toeverything/infra';
|
||||
|
||||
export const useEnableRecording = () => {
|
||||
const meetingSettingsService = useService(MeetingSettingsService);
|
||||
const confirmModal = useConfirmModal();
|
||||
const t = useI18n();
|
||||
|
||||
const handleEnabledChange = useAsyncCallback(
|
||||
async (checked: boolean) => {
|
||||
try {
|
||||
track.$.settingsPanel.meetings.toggleMeetingFeatureFlag({
|
||||
option: checked ? 'on' : 'off',
|
||||
type: 'Meeting record',
|
||||
});
|
||||
await meetingSettingsService.setEnabled(checked);
|
||||
} catch {
|
||||
confirmModal.openConfirmModal({
|
||||
title:
|
||||
t['com.affine.settings.meetings.record.permission-modal.title'](),
|
||||
description:
|
||||
t[
|
||||
'com.affine.settings.meetings.record.permission-modal.description'
|
||||
](),
|
||||
onConfirm: async () => {
|
||||
await meetingSettingsService.showRecordingPermissionSetting(
|
||||
'screen'
|
||||
);
|
||||
},
|
||||
cancelText: t['com.affine.recording.dismiss'](),
|
||||
confirmButtonOptions: {
|
||||
variant: 'primary',
|
||||
},
|
||||
confirmText:
|
||||
t[
|
||||
'com.affine.settings.meetings.record.permission-modal.open-setting'
|
||||
](),
|
||||
});
|
||||
}
|
||||
},
|
||||
[confirmModal, meetingSettingsService, t]
|
||||
);
|
||||
|
||||
return handleEnabledChange;
|
||||
};
|
||||
@@ -0,0 +1,110 @@
|
||||
import { cssVar } from '@toeverything/theme';
|
||||
import { cssVarV2 } from '@toeverything/theme/v2';
|
||||
import { globalStyle, style } from '@vanilla-extract/css';
|
||||
|
||||
export const root = style({
|
||||
height: '100%',
|
||||
position: 'absolute',
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
});
|
||||
|
||||
export const titleWrapper = style({
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
gap: '8px',
|
||||
});
|
||||
|
||||
export const title = style({
|
||||
display: 'flex',
|
||||
fontSize: cssVar('fontH4'),
|
||||
fontWeight: 600,
|
||||
lineHeight: '30px',
|
||||
whiteSpace: 'pre-wrap',
|
||||
position: 'relative',
|
||||
});
|
||||
|
||||
export const subtitle = style({
|
||||
display: 'inline-flex',
|
||||
fontSize: cssVar('fontBase'),
|
||||
fontWeight: 400,
|
||||
lineHeight: '24px',
|
||||
whiteSpace: 'pre-wrap',
|
||||
color: cssVarV2('text/secondary'),
|
||||
});
|
||||
|
||||
export const beta = style({
|
||||
fontSize: cssVar('fontXs'),
|
||||
background: cssVarV2('chip/label/blue'),
|
||||
padding: '0 8px',
|
||||
borderRadius: '4px',
|
||||
position: 'absolute',
|
||||
right: 32,
|
||||
top: 0,
|
||||
});
|
||||
|
||||
export const meetingAppsWrapper = style({
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
height: 100,
|
||||
margin: '20px 0',
|
||||
});
|
||||
|
||||
export const hintsContainer = style({
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
flex: 1,
|
||||
});
|
||||
|
||||
export const hints = style({
|
||||
fontSize: cssVar('fontSm'),
|
||||
lineHeight: '24px',
|
||||
whiteSpace: 'pre-wrap',
|
||||
});
|
||||
|
||||
globalStyle(`${hints} strong`, {
|
||||
fontWeight: 600,
|
||||
});
|
||||
|
||||
globalStyle(`${hints} ul`, {
|
||||
padding: '12px 0',
|
||||
marginLeft: 15,
|
||||
});
|
||||
|
||||
globalStyle(`${hints} li`, {
|
||||
listStyleType: 'disc',
|
||||
padding: '6px 0',
|
||||
});
|
||||
|
||||
globalStyle(`${hints} li::marker`, {
|
||||
color: cssVarV2('block/list/header'),
|
||||
});
|
||||
|
||||
export const learnMoreLink = style({
|
||||
fontSize: cssVar('fontXs'),
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
gap: '4px',
|
||||
fontWeight: 500,
|
||||
color: cssVarV2('text/primary'),
|
||||
});
|
||||
|
||||
export const linkIcon = style({
|
||||
width: 16,
|
||||
height: 16,
|
||||
color: cssVarV2('icon/primary'),
|
||||
});
|
||||
|
||||
export const betaFreePrompt = style({
|
||||
fontSize: cssVar('fontXs'),
|
||||
color: cssVarV2('text/secondary'),
|
||||
});
|
||||
|
||||
export const getStartedButton = style({
|
||||
marginTop: 'auto',
|
||||
alignSelf: 'center',
|
||||
});
|
||||
|
||||
globalStyle(`${betaFreePrompt} strong`, {
|
||||
fontWeight: 700,
|
||||
});
|
||||
@@ -0,0 +1,81 @@
|
||||
import { Button } from '@affine/component';
|
||||
import { MeetingSettingsService } from '@affine/core/modules/media/services/meeting-settings';
|
||||
import { Trans, useI18n } from '@affine/i18n';
|
||||
import { DualLinkIcon } from '@blocksuite/icons/rc';
|
||||
import { useService } from '@toeverything/infra';
|
||||
import { useTheme } from 'next-themes';
|
||||
import { useCallback } from 'react';
|
||||
|
||||
import meetingAppsDark from './meeting-apps.dark.assets.svg';
|
||||
import meetingAppsLight from './meeting-apps.light.assets.svg';
|
||||
import { useEnableRecording } from './use-enable-recording';
|
||||
import * as styles from './welcome-page.css';
|
||||
|
||||
export const MeetingsWelcomePage = () => {
|
||||
const t = useI18n();
|
||||
const meetingSettingsService = useService(MeetingSettingsService);
|
||||
const enableRecording = useEnableRecording();
|
||||
const getStartedClicked = useCallback(() => {
|
||||
meetingSettingsService.setBetaDisclaimerAccepted(true);
|
||||
enableRecording(true);
|
||||
}, [meetingSettingsService, enableRecording]);
|
||||
const theme = useTheme();
|
||||
const meetingApps =
|
||||
theme.resolvedTheme === 'dark' ? meetingAppsDark : meetingAppsLight;
|
||||
return (
|
||||
<div className={styles.root}>
|
||||
<div className={styles.titleWrapper}>
|
||||
<div className={styles.title}>
|
||||
{t['com.affine.settings.meetings.setting.welcome']()}
|
||||
<div className={styles.beta}>Beta</div>
|
||||
</div>
|
||||
<div className={styles.subtitle}>
|
||||
{t['com.affine.settings.meetings.setting.prompt']()}
|
||||
</div>
|
||||
</div>
|
||||
<div className={styles.meetingAppsWrapper}>
|
||||
<img src={meetingApps} alt="meeting-apps" />
|
||||
</div>
|
||||
|
||||
<div className={styles.hintsContainer}>
|
||||
<div className={styles.hints}>
|
||||
<Trans
|
||||
className={styles.hints}
|
||||
i18nKey="com.affine.settings.meetings.setting.welcome.hints"
|
||||
components={{
|
||||
strong: <strong />,
|
||||
ul: <ul />,
|
||||
li: <li />,
|
||||
}}
|
||||
/>
|
||||
<a
|
||||
className={styles.learnMoreLink}
|
||||
href="https://discord.com/channels/959027316334407691/1358384103925350542"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
{t['com.affine.settings.meetings.setting.welcome.learn-more']()}
|
||||
<DualLinkIcon className={styles.linkIcon} />
|
||||
</a>
|
||||
<div className={styles.betaFreePrompt}>
|
||||
<Trans
|
||||
i18nKey="com.affine.settings.meetings.setting.prompt.2"
|
||||
components={{
|
||||
strong: <strong />,
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<Button
|
||||
onClick={getStartedClicked}
|
||||
variant="primary"
|
||||
className={styles.getStartedButton}
|
||||
>
|
||||
{t[
|
||||
'com.affine.settings.workspace.experimental-features.get-started'
|
||||
]()}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -111,6 +111,7 @@ type SettingSidebarItemProps = {
|
||||
title: string;
|
||||
key: string;
|
||||
testId?: string;
|
||||
beta?: boolean;
|
||||
} & HTMLAttributes<HTMLDivElement>;
|
||||
|
||||
const SettingSidebarItem = ({
|
||||
@@ -118,6 +119,7 @@ const SettingSidebarItem = ({
|
||||
icon,
|
||||
title,
|
||||
testId,
|
||||
beta,
|
||||
...props
|
||||
}: SettingSidebarItemProps) => {
|
||||
return (
|
||||
@@ -131,6 +133,7 @@ const SettingSidebarItem = ({
|
||||
>
|
||||
<div className={style.sidebarSelectItemIcon}>{icon}</div>
|
||||
<div className={style.sidebarSelectItemName}>{title}</div>
|
||||
{beta ? <div className={style.sidebarSelectItemBeta}>Beta</div> : null}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -89,6 +89,19 @@ export const sidebarSelectItemName = style({
|
||||
flexGrow: 1,
|
||||
});
|
||||
|
||||
export const sidebarSelectItemBeta = style({
|
||||
fontSize: cssVar('fontXs'),
|
||||
color: cssVarV2('text/primary'),
|
||||
background: cssVarV2('chip/label/blue'),
|
||||
height: 20,
|
||||
display: 'inline-flex',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
padding: '0 8px',
|
||||
borderRadius: '4px',
|
||||
transform: 'translateX(2px)',
|
||||
});
|
||||
|
||||
export const currentWorkspaceLabel = style({
|
||||
width: '20px',
|
||||
height: '20px',
|
||||
|
||||
@@ -11,4 +11,5 @@ export interface SettingSidebarItem {
|
||||
title: string;
|
||||
icon: ReactElement;
|
||||
testId: string;
|
||||
beta?: boolean;
|
||||
}
|
||||
|
||||
@@ -260,18 +260,6 @@ export const AFFINE_FLAGS = {
|
||||
configurable: isCanaryBuild,
|
||||
defaultState: false,
|
||||
},
|
||||
enable_meetings: {
|
||||
category: 'affine',
|
||||
displayName:
|
||||
'com.affine.settings.workspace.experimental-features.enable-meetings.name',
|
||||
description:
|
||||
'com.affine.settings.workspace.experimental-features.enable-meetings.description',
|
||||
configurable: !isMobile && environment.isMacOs && BUILD_CONFIG.isElectron,
|
||||
feedbackType: 'discord',
|
||||
feedbackLink:
|
||||
'https://discord.com/channels/959027316334407691/1358384103925350542',
|
||||
defaultState: false,
|
||||
},
|
||||
// TODO(@L-Sun): remove this flag after the feature is released
|
||||
enable_embed_doc_with_alias: {
|
||||
category: 'blocksuite',
|
||||
|
||||
@@ -16,6 +16,7 @@ import { cssVarV2 } from '@toeverything/theme/v2';
|
||||
|
||||
import type { WorkspaceService } from '../../workspace';
|
||||
import type { AudioMediaManagerService } from '../services/audio-media-manager';
|
||||
import type { MeetingSettingsService } from '../services/meeting-settings';
|
||||
import type { AudioMedia } from './audio-media';
|
||||
import { AudioTranscriptionJob } from './audio-transcription-job';
|
||||
import type { TranscriptionResult } from './types';
|
||||
@@ -44,7 +45,8 @@ export class AudioAttachmentBlock extends Entity<AttachmentBlockModel> {
|
||||
readonly audioMedia: AudioMedia;
|
||||
constructor(
|
||||
readonly audioMediaManagerService: AudioMediaManagerService,
|
||||
readonly workspaceService: WorkspaceService
|
||||
readonly workspaceService: WorkspaceService,
|
||||
readonly meetingSettingsService: MeetingSettingsService
|
||||
) {
|
||||
super();
|
||||
const mediaRef = audioMediaManagerService.ensureMediaEntity(this.props);
|
||||
@@ -256,7 +258,11 @@ export class AudioAttachmentBlock extends Entity<AttachmentBlockModel> {
|
||||
);
|
||||
};
|
||||
fillTranscription(result.segments);
|
||||
await fillSummary(result.summary);
|
||||
await fillActions(result.actions);
|
||||
if (this.meetingSettingsService.settings.autoTranscriptionSummary) {
|
||||
await fillSummary(result.summary);
|
||||
}
|
||||
if (this.meetingSettingsService.settings.autoTranscriptionTodo) {
|
||||
await fillActions(result.actions);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -22,7 +22,11 @@ export function configureMediaModule(framework: Framework) {
|
||||
.service(MeetingSettingsService, [GlobalStateService])
|
||||
.scope(WorkspaceScope)
|
||||
.entity(AudioMedia, [WorkspaceService])
|
||||
.entity(AudioAttachmentBlock, [AudioMediaManagerService, WorkspaceService])
|
||||
.entity(AudioAttachmentBlock, [
|
||||
AudioMediaManagerService,
|
||||
WorkspaceService,
|
||||
MeetingSettingsService,
|
||||
])
|
||||
.entity(AudioTranscriptionJob, [
|
||||
WorkspaceServerService,
|
||||
DefaultServerService,
|
||||
|
||||
@@ -12,8 +12,10 @@ const MEETING_SETTINGS_KEY: typeof MeetingSettingsKey = 'meetingSettings';
|
||||
|
||||
const defaultMeetingSettings: MeetingSettingsSchema = {
|
||||
enabled: false,
|
||||
betaDisclaimerAccepted: false,
|
||||
recordingSavingMode: 'new-doc',
|
||||
autoTranscription: true,
|
||||
autoTranscriptionSummary: true,
|
||||
autoTranscriptionTodo: true,
|
||||
recordingMode: 'prompt',
|
||||
};
|
||||
|
||||
@@ -41,6 +43,13 @@ export class MeetingSettingsService extends Service {
|
||||
return this.settings$.value;
|
||||
}
|
||||
|
||||
setBetaDisclaimerAccepted(accepted: boolean) {
|
||||
this.globalStateService.globalState.set(MEETING_SETTINGS_KEY, {
|
||||
...this.settings$.value,
|
||||
betaDisclaimerAccepted: accepted,
|
||||
});
|
||||
}
|
||||
|
||||
// we do not want the caller to directly set the settings,
|
||||
// there could be some side effects when the settings are changed.
|
||||
async setEnabled(enabled: boolean) {
|
||||
@@ -91,10 +100,17 @@ export class MeetingSettingsService extends Service {
|
||||
});
|
||||
}
|
||||
|
||||
setAutoTranscription(autoTranscription: boolean) {
|
||||
setAutoSummary(autoSummary: boolean) {
|
||||
this.globalStateService.globalState.set(MEETING_SETTINGS_KEY, {
|
||||
...this.settings$.value,
|
||||
autoTranscription,
|
||||
autoTranscriptionSummary: autoSummary,
|
||||
});
|
||||
}
|
||||
|
||||
setAutoTodo(autoTodo: boolean) {
|
||||
this.globalStateService.globalState.set(MEETING_SETTINGS_KEY, {
|
||||
...this.settings$.value,
|
||||
autoTranscriptionTodo: autoTodo,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user