第一次提交

This commit is contained in:
街角小林 2025-07-05 23:05:45 +08:00
parent bec659c4e4
commit 85ea18277b
353 changed files with 39762 additions and 0 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

12
manifest.json Normal file
View file

@ -0,0 +1,12 @@
{
"id": "obsidian-simple-mind-map",
"name": "SimpleMindMap",
"version": "0.1.0",
"minAppVersion": "0.15.0",
"description": "simple-mind-map official plugin for obsidian",
"author": "wanglin",
"authorUrl": "https://github.com/wanglin2",
"fundingUrl": "",
"isDesktopOnly": false,
"permissions": ["files"]
}

BIN
plugin/.DS_Store vendored Normal file

Binary file not shown.

786
plugin/SmmEditView.js Normal file
View file

@ -0,0 +1,786 @@
import { Notice, TextFileView, TFile, setIcon } from 'obsidian'
import {
SMM_VIEW_TYPE,
SAVE_ICON,
IMPORT_ICON,
EXPORT_ICON,
SMM_TAG,
OUTLINE_ICON,
MINDMAP_ICON,
PRINT_ICON
} from './ob/constant.js'
import { initApp } from './src/main.js'
import {
assembleMarkdownText,
parseMarkdownText,
createDefaultText
} from './ob/metadataAndMarkdown.js'
import { hideTargetMenu } from './ob/utils.js'
import LZString from 'lz-string'
// 自定义视图类
class SmmEditView extends TextFileView {
constructor(leaf, plugin) {
super(leaf)
this.plugin = plugin
this.contentEl.style.padding = 0
this.warpEl = this.contentEl.createDiv('smmMindmapEditContainer')
this.warpEl.style.cssText = `
width: 100%;
height: 100%;
overflow: hidden;
`
// 字符串类型的文件数据
this.mindMapData = ''
// 解析后的文件数据
this.parsedMindMapData = null
// Vue实例
this.mindMapAPP = null
// 当前视图是否处于激活状态
this.isActive = true
// 监听容器元素的尺寸变化
this.resizeObserver = null
// 当前文件是否存在未保存的内容
this.isUnSave = false
// 是否外部修改了当前文件
this.isOuterChange = false
// 是否不要触发data_change事件当外部修改数据时进行同步使用
this.isNotTriggerDataChange = false
// 按钮元素
this.isOutlineEditMode = false
this.saveButton = null
this.exportButton = null
this.importButton = null
this.printOutlineButton = null
this.changeToOutlineButton = null
this.changeToMindmapButton = null
this.savingTipEl = null
this.isReadonlyMode = false
this.toggleReadonlyButton = null
}
// 获取视图类型
getViewType() {
return SMM_VIEW_TYPE
}
// 获取图标名称
getIcon() {
return 'smm-icon'
}
// 右上角更多菜单扩展
onPaneMenu(menu, source) {
super.onPaneMenu(menu, source)
// 隐藏特定默认菜单项
hideTargetMenu(menu, '在新窗口中打开')
hideTargetMenu(menu, '移动至新窗口')
}
// 切换到Markdown视图
async switchToMarkdownView() {
if (!this.file || !this.leaf) return
// 获取默认的Markdown视图类型
const mdViewType = this.app.viewRegistry.getTypeByExtension('md')
// 切换到Markdown视图
await this.leaf.setViewState({
type: mdViewType,
state: {
...this.leaf.getViewState().state,
isSwitchToMarkdownViewFromSmmView: true
},
popstate: true // 保持导航历史
})
}
// 打开视图
async onOpen() {
// 注册文件修改监听器
this.registerEvent(
this.app.vault.on('modify', this._handleExternalChange.bind(this))
)
// 注册激活状态监听
this.registerEvent(
this.app.workspace.on(
'active-leaf-change',
this._handleActiveChange.bind(this)
)
)
// 注册窗口大小变化监听
this.registerEvent(
this.app.workspace.on('resize', this._handleResize.bind(this))
)
this._onKeyup = this._onKeyup.bind(this)
window.addEventListener('keyup', this._onKeyup)
// 在视图头部右侧添加工具按钮
this._addActionBtns()
// 监听主题模式改变
this._initThemeMode()
}
// 获取视图数据(保存到文件)
getViewData() {
return this.mindMapData
}
// 解析加载的数据
async setViewData(data, isClear) {
if (isClear) {
this.clear()
}
let rawData = data.trim()
try {
// 空文件处理
if (!rawData) {
// 文件内容为空
throw new Error(this.plugin._t('tip.fileIsEmpty'))
} else {
this.parsedMindMapData = parseMarkdownText(rawData)
const content = this.parsedMindMapData.metadata.content
if (content) {
this.parsedMindMapData.metadata.content = LZString.decompressFromBase64(
content
)
} else {
throw new Error('文件格式错误')
}
}
} catch (error) {
console.log('数据解析失败,使用默认思维导图数据', error)
rawData = createDefaultText(
'',
this.plugin._getCreateDefaultMindMapOptions()
)
}
this.mindMapData = rawData
if (!this.parsedMindMapData) {
this.parsedMindMapData = parseMarkdownText(rawData)
this.parsedMindMapData.metadata.content = LZString.decompressFromBase64(
this.parsedMindMapData.metadata.content
)
}
if (isClear) {
this._renderMindMap()
} else if (this.mindMapAPP) {
this.isNotTriggerDataChange = true
this.mindMapAPP.$bus.$emit(
'updateMindMapDataFromOb',
this.parsedMindMapData.metadata.content
)
}
}
// 清理观察者
_clearObserver() {
if (this.resizeObserver) {
this.resizeObserver.disconnect()
this.resizeObserver = null
}
}
// 渲染思维导图
_renderMindMap() {
this.warpEl.empty()
const el = this.warpEl.createDiv('smmMindMapEdit')
el.style.cssText = `
width: 100%;
height: 100%;
overflow: hidden;
`
// 清理旧的观察者
this._clearObserver()
// 创建新的尺寸观察者
this.resizeObserver = new ResizeObserver(entries => {
for (const entry of entries) {
const { width, height } = entry.contentRect
if (width > 10 && height > 10) {
this._initializeMindMap(el)
this._clearObserver()
break
}
}
})
this.resizeObserver.observe(el)
}
// 实际初始化思维导图
_initializeMindMap(el) {
// 确保没有重复初始化
if (this.mindMapAPP) return
const filePath = this.file?.path
let initLocationNodeId = ''
const { fileToSubpathMap } = this.plugin
if (fileToSubpathMap && fileToSubpathMap[filePath]) {
initLocationNodeId = fileToSubpathMap[filePath]
delete fileToSubpathMap[filePath]
}
this.mindMapAPP = initApp(el, {
// 传递初始数据给思维导图渲染
getInitMindMapData: () => {
return this.parsedMindMapData.metadata.content
},
// 获取思维导图初始化位置的节点ID
getInitLocationNodeId: () => {
return initLocationNodeId
},
// 从思维导图获取最新数据
getMindMapCurrentData: (content, linkData) => {
this.parsedMindMapData.metadata.content = content
this.mindMapData = assembleMarkdownText({
metadata: {
path: `${filePath}`,
tags: [SMM_TAG],
content: LZString.compressToBase64(content)
},
svgdata: this.parsedMindMapData.svgdata,
linkdata: linkData || this.parsedMindMapData.linkdata || []
})
},
// 思维导图中触发保存
saveMindMapData: (_, svgData) => {
if (svgData) {
this.parsedMindMapData.svgdata = LZString.compressToBase64(svgData)
}
this._showSavingTip()
this.save()
},
// 获取思维导图配置
getMindMapConfig: () => {
return this.plugin.settings.mindMapConfig || {}
},
// 设置思维导图配置
saveMindMapConfig: newConfig => {
this.plugin.settings.mindMapConfig = newConfig
this.plugin._saveSettings()
},
// 获取思维导图本地配置
getMindMapLocalConfig: () => {
const { mindMapLocalConfig, themeMode } = this.plugin.settings
const config = mindMapLocalConfig || {}
config.isDark =
themeMode === 'follow'
? this.plugin._getObIsDark()
: themeMode === 'dark'
return config
},
// 设置思维导图本地配置
saveMindMapLocalConfig: newConfig => {
this.plugin.settings.mindMapLocalConfig = newConfig
this.plugin._saveSettings()
},
// 获取设置
getSettings: () => {
return this.plugin.settings || {}
},
updateSettings: data => {
this.plugin.settings = {
...this.plugin.settings,
...data
}
this.plugin._saveSettings()
},
// 获取所有文件
getObAllFiles: (extraSelf = true) => {
const fileList = this.app.vault.getFiles()
if (extraSelf && this.file) {
return fileList.filter(item => {
return item.path !== this.file.path
})
}
return fileList
},
// 创建内链文件信息
createLinkInfoFromFilePath: filePath => {
const file = this.app.vault.getAbstractFileByPath(filePath)
if (!file) {
return null
}
const linkText = this.app.fileManager.generateMarkdownLink(
file,
this.file?.path || ''
)
return {
link: file.path,
linkText
}
},
// 打开文件
openFile: filePath => {
if (!filePath) return
// [[xxx#xxx]]、[[xxx^xxx]]、[[xxx|xxx]]
const arr = filePath.split(/(#|^|\|)/)
filePath = arr[0]
let postfix = ''
if (arr.length > 1 && arr[1] !== '|') {
postfix = arr.slice(1).join('')
}
this.app.vault.getAbstractFileBy
let file = this.app.vault.getAbstractFileByPath(filePath)
if (!file) {
file = this.app.vault.getAbstractFileByPath(filePath + '.md')
}
if (file && file instanceof TFile) {
this.app.workspace.openLinkText(file.path + postfix, '')
}
},
// 核心方法:打开网页链接
openWebLink: url => {
if (this.app.openExternal) {
this.app.openExternal(url)
return
}
// 兼容旧版 Obsidian 和移动端
try {
// 桌面端 Electron 环境
if (window.require) {
const { shell } = window.require('electron')
shell.openExternal(url)
return
}
} catch (e) {
console.error('Electron module not available', e)
}
// 通用回退方案
window.open(url, '_blank', 'noopener,noreferrer')
},
// 保存文件到 vault
saveFileToVault: async (file, isImg = true) => {
try {
const folder = isImg
? this._getFileSavePath(
'imagePathType',
'imagePath',
'imageSubPath'
)
: this._getFileSavePath(
'attachmentPathType',
'attachmentPath',
'attachmentSubPath'
)
await this.plugin._ensureDirectoryExists(folder)
// 处理文件名冲突
let fileName = file.name
let counter = 1
while (
await this.app.vault.adapter.exists(
folder ? `${folder}/${fileName}` : fileName
)
) {
const parts = file.name.split('.')
const ext = parts.pop()
fileName = `${parts.join('.')}_${counter}.${ext}`
counter++
}
// 读取文件内容
const arrayBuffer = await file.arrayBuffer()
// 在vault中创建路径
const vaultPath = folder ? `${folder}/${fileName}` : fileName
// 写入文件
await this.app.vault.createBinary(vaultPath, arrayBuffer)
return vaultPath
} catch (error) {
console.error('保存文件失败:', error)
return null
}
},
// 获取资源路径
getResourcePath: vaultPath => {
return this.app.vault.adapter.getResourcePath(vaultPath)
},
// 获取当前文件的链接信息
getObInternalLink: (...args) => {
return this.app.fileManager.generateMarkdownLink(this.file, ...args)
},
// 显示ob提示
showTip: tip => {
new Notice(tip)
},
// 从ob://协议的URI中获取文件信息
getFileFromUri: uri => {
const params = new URLSearchParams(uri.split('?')[1])
const vault = decodeURIComponent(params.get('vault') || '')
const filePath = decodeURIComponent(params.get('file') || '')
if (!vault || !filePath) return null
// 检查当前vault是否匹配
if (this.app.vault.getName() !== vault) {
// 只允许添加当前仓库的文件
new Notice(this.plugin._t('tip.onlyEnableSelectCurrentVaultFile'))
return null
}
return this.app.vault.getAbstractFileByPath(filePath)
}
})
setTimeout(() => {
this._listenMindMapEvent()
}, 100)
}
// 重写保存钩子(最直接的方式)
async save() {
if (!this.isActive) {
return
}
// 获取一下最新数据
// 取消本次自动保存
if (this.mindMapAPP) {
this.mindMapAPP.$bus.$emit('getMindMapCurrentData')
this.mindMapAPP.$bus.$emit('clearAutoSave')
}
await super.save()
this._setIsUnSave(false)
this._hideSavingTip()
}
_onKeyup(e) {
if (e.ctrlKey || e.metaKey) {
if (e.key === 's') {
this._showSavingTip()
this.save()
}
}
}
// 监听思维导图事件
_listenMindMapEvent() {
this._onDataChange = this._onDataChange.bind(this)
this.mindMapAPP.$bus.$on('data_change', this._onDataChange)
// this.mindMapAPP.$bus.$on('view_data_change', this._onDataChange)
}
// 监听思维导图数据改变
_onDataChange() {
if (this.isNotTriggerDataChange) {
this.isNotTriggerDataChange = false
return
}
this._setIsUnSave(true)
}
// 处理窗口大小变化
_handleResize() {
// if (!this.isActive) return
if (!this.mindMapAPP) {
return
}
try {
if (this.mindMapAPP.$updateMindMapSize) {
const { width, height } = this.warpEl.getBoundingClientRect()
if (width > 0 && height > 0) {
this.mindMapAPP.$updateMindMapSize()
}
}
} catch (e) {
console.error('更新尺寸失败:', e)
}
}
// 处理标签激活状态变化
async _handleActiveChange(leaf) {
const nowActive = leaf?.view === this
if (nowActive && !this.isActive) {
// 标签被激活
this.isActive = true
// 激活后刷新视图
if (this.mindMapAPP) {
// 更新尺寸
// this._handleResize()
// 更新外部修改
if (this.isOuterChange) {
// await this.file.vault.read(this.file)
this.isOuterChange = false
}
}
} else if (!nowActive && this.isActive) {
// 标签失去激活
if (this.mindMapAPP) {
this.save()
this.mindMapAPP.$clearUpdateMindMapSize()
}
this.isActive = false
}
}
// 处理外部文件修改
async _handleExternalChange(file) {
if (this.isActive) return
if (file.path === this.file?.path) {
this.isOuterChange = true
}
}
// 清空视图数据
clear() {
// 清理观察者
this._clearObserver()
// 销毁应用实例
if (this.mindMapAPP) {
try {
this.mindMapAPP.$destroy()
} catch (e) {
console.error('销毁实例时出错:', e)
}
this.mindMapAPP = null
}
this.warpEl.empty()
this.mindMapData = ''
this.parsedMindMapData = null
this.isUnSave = false
this.isOuterChange = false
this.isNotTriggerDataChange = false
this._resetOnOutlineEditMode()
}
async onClose() {
await this.save() // 手动保存
this.clear()
this.saveButton = null
this.exportButton = null
this.importButton = null
this.printOutlineButton = null
this.changeToOutlineButton = null
this.changeToMindmapButton = null
this.toggleReadonlyButton = null
window.removeEventListener('keyup', this._onKeyup)
}
// 防抖函数实现
_debounce(func, wait) {
let timeout
return () => {
clearTimeout(timeout)
timeout = setTimeout(() => {
func.call(this)
}, wait)
}
}
// 在视图头部右侧添加工具按钮
_addActionBtns() {
// svg需添加class="svg-icon"
const viewActions = this.headerEl.querySelector('.view-actions')
// 切换只读/编辑模式
this.toggleReadonlyButton = this._createActionBtn(
this.plugin._t('action.changeToReadonly'),
'book-open',
viewActions,
async () => {
await this.save()
if (this.isReadonlyMode) {
this.isReadonlyMode = false
this.mindMapAPP.$bus.$emit('toggleReadonly', false)
setIcon(this.toggleReadonlyButton, 'book-open')
this.toggleReadonlyButton.setAttribute(
'aria-label',
this.plugin._t('action.changeToReadonly')
)
this._showButtons([
this.saveButton,
this.importButton,
this.exportButton
])
} else {
this.isReadonlyMode = true
this.mindMapAPP.$bus.$emit('toggleReadonly', true)
setIcon(this.toggleReadonlyButton, 'edit-3')
this.toggleReadonlyButton.setAttribute(
'aria-label',
this.plugin._t('action.changeToEdit')
)
this._hideButtons([
this.saveButton,
this.importButton,
this.exportButton
])
}
},
true
)
// 切换为大纲模式
this.changeToOutlineButton = this._createActionBtn(
this.plugin._t('action.changeToOutline'),
OUTLINE_ICON,
viewActions,
async () => {
await this.save()
this._hideButtons([this.exportButton, this.changeToOutlineButton])
this._showButtons([this.printOutlineButton, this.changeToMindmapButton])
// 保存按钮文案修改
this.saveButton.setAttribute('aria-label', '保存')
this.mindMapAPP.$bus.$emit('showOutlineEdit')
this.isOutlineEditMode = true
}
)
// 切换为思维导图模式
this.changeToMindmapButton = this._createActionBtn(
this.plugin._t('action.changeToMindMap'),
MINDMAP_ICON,
viewActions,
async () => {
await this.save()
this.mindMapAPP.$bus.$emit('hideOutlineEdit')
this._resetOnOutlineEditMode()
}
)
this._hideButtons([this.changeToMindmapButton])
// 打印大纲
this.printOutlineButton = this._createActionBtn(
this.plugin._t('action.printOutline'),
PRINT_ICON,
viewActions,
async () => {
this.mindMapAPP.$bus.$emit('printOutline')
}
)
this._hideButtons([this.printOutlineButton])
// 导入
this.importButton = this._createActionBtn(
this.plugin._t('action.import'),
IMPORT_ICON,
viewActions,
() => {
this.mindMapAPP.$bus.$emit('showImport')
}
)
// 导出
this.exportButton = this._createActionBtn(
this.plugin._t('action.export'),
EXPORT_ICON,
viewActions,
() => {
this.mindMapAPP.$bus.$emit('showExport')
}
)
// 保存并更新图像数据
this.saveButton = this._createActionBtn(
this.plugin._t('action.saveAndUpdateImage'),
SAVE_ICON,
viewActions,
() => {
this._showSavingTip()
this.mindMapAPP.$bus.$emit('saveToLocal', true, true)
}
)
// 保存中的提示
this.savingTipEl = this.headerEl.createEl('div', {
cls: 'smm-save-tip'
})
viewActions.insertBefore(this.savingTipEl, viewActions.firstChild)
}
_showSavingTip() {
if (!this.savingTipEl) return
// 保存中...
this.savingTipEl.innerText = this.plugin._t('tip.saving')
}
_hideSavingTip() {
if (!this.savingTipEl) return
this.savingTipEl.innerText = ''
}
// 创建工具按钮
_createActionBtn(label, icon, parentEl, onClick, isObIcon = false) {
const el = this.headerEl.createEl('button', {
cls: 'clickable-icon'
})
el.setAttribute('aria-label', label)
if (isObIcon) {
setIcon(el, icon, 24)
} else {
el.innerHTML = icon
}
parentEl.insertBefore(el, parentEl.firstChild)
el.addEventListener('click', onClick)
return el
}
// 重置大纲编辑模式
_resetOnOutlineEditMode() {
if (this.isOutlineEditMode) {
this.saveButton.setAttribute(
'aria-label',
this.plugin._t('action.saveAndUpdateImage')
)
this._showButtons([this.exportButton, this.changeToOutlineButton])
this._hideButtons([this.changeToMindmapButton, this.printOutlineButton])
this.isOutlineEditMode = false
}
}
_showButtons(list) {
list.forEach(el => {
el.style.display = 'flex'
})
}
_hideButtons(list) {
list.forEach(el => {
el.style.display = 'none'
})
}
// 设置是否存在未保存的内容
_setIsUnSave(isUnSave) {
if (!this.saveButton) return
this.isUnSave = isUnSave
this.saveButton.style.color = isUnSave ? '#ff6600' : 'var(--icon-color)'
}
// 检测主题模式
_initThemeMode() {
// 初始检查
this._updateThemeMode()
// 监听主题变化事件
this.registerEvent(
this.app.workspace.on('css-change', () => {
this._updateThemeMode()
})
)
}
// 更新主题模式
_updateThemeMode() {
if (this.plugin.settings.themeMode === 'follow') {
const isDarkMode = this.plugin._getObIsDark()
if (this.mindMapAPP) {
this.mindMapAPP.$bus.$emit('setIsDark', isDarkMode)
}
}
}
// 获取图片、文件存储路径
_getFileSavePath(typeKey, pathKey, subPathKey) {
const type = this.plugin.settings[typeKey]
const folder = this.plugin.settings[pathKey] || ''
const subFolder = this.plugin.settings[subPathKey] || ''
switch (type) {
case 'root':
return ''
case 'custom':
return folder
case 'currentFileFolder':
return this.plugin._getActiveFileDirectory()
case 'currentFileFolderSubFolder':
const activeFileDirectory = this.plugin._getActiveFileDirectory()
return [activeFileDirectory, subFolder].filter(Boolean).join('/')
default:
return ''
}
}
}
export default SmmEditView

113
plugin/locales/en.json Normal file
View file

@ -0,0 +1,113 @@
{
"common": {
"mindMap": "Mind Map",
"rootNodeDefaultText": "Root Node",
"secondNodeDefaultText": "Secondary node",
"branchNodeDefaultText": "Branch Topic"
},
"action": {
"createMindMap": "Create New Mind Map",
"createMindMapInsertToMd": "Create Mind Map and Insert into Current Document",
"openAsMd": "Open as Markdown Document",
"openAsMindMap": "Open as Mind Map Document",
"changeToOutline": "Switch to Outline Mode",
"changeToMindMap": "Switch to Mind Map Mode",
"printOutline": "Print Outline",
"import": "Import",
"export": "Export",
"saveAndUpdateImage": "Save and Update Image Data",
"insertCodeBlockToMd": "Insert Mind Map Code Block into Current Document",
"previewAsMindMap": "Preview as Mind Map",
"changeToReadonly": "Change to Readonly Mode",
"changeToEdit": "Change to Edit Mode"
},
"tip": {
"fileExist": "File already exists",
"createMindMapFail": "Failed to create mind map",
"fileIsNotMd": "Current file is not a Markdown document",
"fileIsEmpty": "File content is empty",
"fileFormatError": "File format error",
"onlyEnableSelectCurrentVaultFile": "Only files from the current vault can be added",
"saving": "Saving...",
"integerInputError": "Please enter a number greater than 0",
"noPreviewImage": "No preview image available",
"insertFail": "Insertion failed",
"noMatchResult": "No matching results"
},
"setting": {
"themeMode": {
"title": "Theme Mode",
"desc": "Dark and light color modes",
"option1": "Follow Obsidian",
"option2": "Light Mode",
"option3": "Dark Mode"
},
"theme": {
"title": "Default Theme",
"desc": "Default theme when creating a new mind map file"
},
"layout": {
"title": "Default Layout",
"desc": "The default structure when creating a new mind map file"
},
"folder": {
"title4": "Mind Map File Storage Location",
"desc4": "Storage location for newly created SimpleMindMap files",
"title1": "Custom File Storage Directory",
"desc1": "Custom file storage directory, relative to vault root directory",
"title5": "Image Storage Location",
"desc5": "Storage location for uploaded image files (node images, background images)",
"title2": "Custom Image Storage Directory",
"desc2": "Custom image storage directory, relative to vault root directory",
"title6": "Custom Subfolder",
"desc6": "Custom subfolder, relative to current file's folder",
"title7": "File Storage Location",
"desc7": "Storage directory for local files selected in node hyperlinks",
"title3": "Custom File Storage Directory",
"desc3": "Custom file storage directory, relative to vault root directory",
"option1": "Vault root directory",
"option2": "Specified folder",
"option3": "Current file's folder",
"option4": "Specified subfolder under current file's folder"
},
"compress": {
"title1": "Compress Images",
"desc1": "Whether to compress uploaded node images (locally selected images)",
"title2": "Maximum Compression Width",
"desc2": "Set the maximum width after image compression",
"title3": "Maximum Compression Height",
"desc3": "Set the maximum height after image compression",
"title4": "Image Quality",
"desc4": "The quality of compressed images is only valid for certain image formats, such as jpg",
"curValue": "Current Value",
"reset": "Reset to Default"
},
"autoSave": {
"title": "Auto-save Interval",
"desc": "Inactivity time before auto-save (seconds)"
},
"codeBlock": {
"title": "Code Block Initial Height",
"desc": "Initial height when embedding via smm code block (pixels)"
},
"linkInfo": {
"issues": "Bugs and Feature Requests",
"desktop": "Download independent client"
},
"embed": {
"title1": "Embed Preview Double Click to Open a New Window",
"desc1": "When embedding an MD document in format ![[]], double-click to preview the image and open the file in a new window",
"title2": "Embed Preview Background Transparent",
"desc2": "Set whether the background of the embedded preview image is transparent"
},
"file": {
"title1": "New Mind Map File Name Prefix",
"desc1": "Default naming format for new mind map files: Prefix + Space + Date Timestamp",
"title2": "Date Timestamp Format for New Mind Map Files",
"desc2": "Default format: YYYY-MM-DD HH.mm.ss, Example: 2025-01-01 23.59.59. For details on format meaning and modification, refer to: https://day.js.org/docs/en/parse/string-format"
},
"button": {
"select": "Select"
}
}
}

113
plugin/locales/vi.json Normal file
View file

@ -0,0 +1,113 @@
{
"common": {
"mindMap": "Sơ đồ tư duy",
"rootNodeDefaultText": "Nút gốc",
"secondNodeDefaultText": "Nút cấp hai",
"branchNodeDefaultText": "Chủ đề nhánh"
},
"action": {
"createMindMap": "Tạo sơ đồ tư duy mới",
"createMindMapInsertToMd": "Tạo sơ đồ tư duy mới và chèn vào tài liệu hiện tại",
"openAsMd": "Mở dưới dạng tài liệu Markdown",
"openAsMindMap": "Mở dưới dạng tài liệu sơ đồ tư duy",
"changeToOutline": "Chuyển sang chế độ dàn bài",
"changeToMindMap": "Chuyển sang chế độ sơ đồ tư duy",
"printOutline": "In dàn bài",
"import": "Nhập vào",
"export": "Xuất ra",
"saveAndUpdateImage": "Lưu và cập nhật dữ liệu hình ảnh",
"insertCodeBlockToMd": "Chèn khối mã sơ đồ tư duy vào tài liệu hiện tại",
"previewAsMindMap": "Xem trước dưới dạng sơ đồ tư duy",
"changeToReadonly": "Chuyển sang chế độ xem",
"changeToEdit": "Chuyển sang chế độ chỉnh sửa"
},
"tip": {
"fileExist": "Tệp đã tồn tại",
"createMindMapFail": "Tạo sơ đồ tư duy thất bại",
"fileIsNotMd": "Tệp hiện tại không phải tệp markdown",
"fileIsEmpty": "Nội dung tệp trống",
"fileFormatError": "Lỗi định dạng tệp",
"onlyEnableSelectCurrentVaultFile": "Chỉ cho phép thêm tệp từ kho hiện tại",
"saving": "Đang lưu...",
"integerInputError": "Vui lòng nhập số lớn hơn 0",
"noPreviewImage": "Không có hình ảnh xem trước",
"insertFail": "Chèn thất bại",
"noMatchResult": "Không có kết quả phù hợp"
},
"setting": {
"themeMode": {
"title": "Chế độ chủ đề",
"desc": "Chế độ tối, ánh sáng",
"option1": "Theo Obsidian",
"option2": "Chế độ sáng",
"option3": "Chế độ tối"
},
"theme": {
"title": "Chủ đề mặc định",
"desc": "Giao diện mặc định khi tạo bản đồ tư duy mới"
},
"layout": {
"title": "Cấu trúc mặc định",
"desc": "Cấu trúc mặc định khi tạo tệp sơ đồ tư duy mới"
},
"folder": {
"title4": "Vị trí lưu trữ tệp sơ đồ tư duy",
"desc4": "Vị trí lưu trữ tệp SimpleMindMap mới tạo",
"title1": "Thư mục lưu trữ tệp tùy chỉnh",
"desc1": "Thư mục lưu trữ tệp tùy chỉnh, tương đối với thư mục gốc kho lưu trữ",
"title5": "Vị trí lưu trữ hình ảnh",
"desc5": "Vị trí lưu trữ tệp hình ảnh đã tải lên (hình ảnh nút, hình nền)",
"title2": "Thư mục lưu trữ hình ảnh tùy chỉnh",
"desc2": "Thư mục lưu trữ hình ảnh tùy chỉnh, tương đối với thư mục gốc kho lưu trữ",
"title6": "Thư mục con tùy chỉnh",
"desc6": "Thư mục con tùy chỉnh, tương đối với thư mục chứa tệp hiện tại",
"title7": "Vị trí lưu trữ tệp",
"desc7": "Thư mục lưu trữ tệp cục bộ được chọn trong siêu liên kết nút",
"title3": "Thư mục lưu trữ tệp tùy chỉnh",
"desc3": "Thư mục lưu trữ tệp tùy chỉnh, tương đối với thư mục gốc kho lưu trữ",
"option1": "Thư mục gốc của kho lưu trữ",
"option2": "Thư mục chỉ định",
"option3": "Thư mục chứa tệp hiện tại",
"option4": "Thư mục con được chỉ định trong thư mục chứa tệp hiện tại"
},
"compress": {
"title1": "Có nén ảnh không",
"desc1": "Nén ảnh nút đã tải lên (ảnh được chọn cục bộ)",
"title2": "Chiều rộng tối đa khi nén",
"desc2": "Thiết lập chiều rộng tối đa sau khi nén ảnh",
"title3": "Chiều cao tối đa khi nén",
"desc3": "Thiết lập chiều cao tối đa sau khi nén ảnh",
"title4": "Chất lượng ảnh",
"desc4": "Chất lượng sau khi nén hình ảnh, chỉ có hiệu quả đối với một số định dạng hình ảnh, ví dụ như: jpg",
"curValue": "Giá trị hiện tại",
"reset": "Đặt lại về mặc định"
},
"autoSave": {
"title": "Thời gian tự động lưu",
"desc": "Thời gian tự động lưu khi không có thao tác, đơn vị: giây"
},
"codeBlock": {
"title": "Chiều cao ban đầu của khối mã nhúng",
"desc": "Chiều cao ban đầu khi nhúng bằng khối mã smm, đơn vị: px"
},
"linkInfo": {
"issues": "Gửi bug hoặc gợi ý",
"desktop": "Nhận khách hàng độc lập"
},
"embed": {
"title1": "Nhúng xem thử Nhấp đúp vào cửa sổ mới để mở",
"desc1": "![[]] Định dạng Nhấp đúp vào ô xem thử ảnh khi nhúng tài liệu md có cửa sổ mới Mở tập tin không",
"title2": "Hình nền nhúng xem thử có trong suốt không",
"desc2": "Thiết lập hình nền nhúng xem thử có trong suốt không"
},
"file": {
"title1": "Tiền tố tên tệp sơ đồ tư duy mới",
"desc1": "Định dạng đặt tên mặc định cho tên tệp sơ đồ tư duy mới là: Tiền tố + Dấu cách + Dấu thời gian ngày tháng",
"title2": "Định dạng dấu thời gian ngày tháng cho tên tệp sơ đồ tư duy mới",
"desc2": "Mặc định: YYYY-MM-DD HH.mm.ss, Ví dụ thực tế: 2025-01-01 23.59.59. Nếu không rõ ý nghĩa cụ thể của định dạng này và cách sửa đổi, vui lòng tham khảo: https://day.js.org/docs/en/parse/string-format"
},
"button": {
"select": "Chọn"
}
}
}

113
plugin/locales/zh.json Normal file
View file

@ -0,0 +1,113 @@
{
"common": {
"mindMap": "思维导图",
"rootNodeDefaultText": "根节点",
"secondNodeDefaultText": "二级节点",
"branchNodeDefaultText": "分支主题"
},
"action": {
"createMindMap": "新建思维导图",
"createMindMapInsertToMd": "新建思维导图并插入当前文档",
"openAsMd": "打开为Markdown文档",
"openAsMindMap": "打开为思维导图文档",
"changeToOutline": "切换为大纲模式",
"changeToMindMap": "切换为思维导图模式",
"printOutline": "打印大纲",
"import": "导入",
"export": "导出",
"saveAndUpdateImage": "保存并更新图像数据",
"insertCodeBlockToMd": "插入思维导图代码块到当前文档",
"previewAsMindMap": "预览为思维导图",
"changeToReadonly": "切换为只读模式",
"changeToEdit": "切换为编辑模式"
},
"tip": {
"fileExist": "文件已经存在",
"createMindMapFail": "新建思维导图失败",
"fileIsNotMd": "当前文件不是markdown文件",
"fileIsEmpty": "文件内容为空",
"fileFormatError": "文件格式错误",
"onlyEnableSelectCurrentVaultFile": "只允许添加当前仓库的文件",
"saving": "保存中...",
"integerInputError": "请输入大于0的数字",
"noPreviewImage": "没有可预览图片",
"insertFail": "插入失败",
"noMatchResult": "暂无匹配结果"
},
"setting": {
"themeMode": {
"title": "主题模式",
"desc": "深色、浅色模式",
"option1": "跟随obsidian",
"option2": "浅色模式",
"option3": "深色模式"
},
"theme": {
"title": "默认主题",
"desc": "新建思维导图文件时的默认主题"
},
"layout": {
"title": "默认结构",
"desc": "新建思维导图文件时的默认结构"
},
"folder": {
"title4": "思维导图文件存储位置",
"desc4": "新建的SimpleMindMap文件存储位置",
"title1": "自定义文件存储目录",
"desc1": "自定义文件存储目录,相对于仓库根目录",
"title5": "图片存储位置",
"desc5": "上传的图片文件(节点图片、背景图片)存储位置",
"title2": "自定义图片存储目录",
"desc2": "自定义图片存储目录,相对于仓库根目录",
"title6": "自定义子文件夹",
"desc6": "自定义子文件夹,相对于当前文件所在文件夹",
"title7": "文件存储位置",
"desc7": "节点超链接中选择的本地文件存储目录",
"title3": "自定义文件存储目录",
"desc3": "自定义文件存储目录,相对于仓库根目录",
"option1": "仓库的根目录",
"option2": "指定文件夹",
"option3": "当前文件所在的文件夹",
"option4": "当前文件所在文件夹下指定的子文件夹"
},
"compress": {
"title1": "是否压缩图片",
"desc1": "是否压缩上传的节点图片(从本地选择的图片)",
"title2": "最大压缩宽度",
"desc2": "图片压缩后的最大宽度",
"title3": "最大压缩高度",
"desc3": "图片压缩后的最大高度",
"title4": "图片质量",
"desc4": "图片压缩后的质量仅对部分图片格式有效比如jpg",
"curValue": "当前值",
"reset": "重置为默认值"
},
"autoSave": {
"title": "自动保存时间",
"desc": "无操作自动保存时间,单位:秒"
},
"codeBlock": {
"title": "代码块嵌入初始高度",
"desc": "smm代码块方式嵌入时初始高度单位px"
},
"linkInfo": {
"issues": "提交bug或建议",
"desktop": "下载独立客户端"
},
"embed": {
"title1": "嵌入预览双击是否新窗口打开",
"desc1": "![[]]格式嵌入md文档时双击预览图像是否新窗口打开文件",
"title2": "嵌入预览的图像背景是否透明",
"desc2": "![[]]格式嵌入预览的图像背景是否透明"
},
"file": {
"title1": "新建思维导图的文件名前缀",
"desc1": "新建思维导图文件名默认的命名格式为:前缀 + 空格 + 日期时间戳",
"title2": "新建思维导图的文件名日期时间戳格式",
"desc2": "默认为YYYY-MM-DD HH.mm.ss实际示例2025-01-01 23.59.59如不清楚该格式的具体含义及如何修改请参考https://day.js.org/docs/en/parse/string-format"
},
"button": {
"select": "选择"
}
}
}

113
plugin/locales/zhtw.json Normal file
View file

@ -0,0 +1,113 @@
{
"common": {
"mindMap": "思維導圖",
"rootNodeDefaultText": "根節點",
"secondNodeDefaultText": "二級節點",
"branchNodeDefaultText": "分支主題"
},
"action": {
"createMindMap": "新建思維導圖",
"createMindMapInsertToMd": "新建思維導圖並插入當前文件",
"openAsMd": "開啟為 Markdown 文件",
"openAsMindMap": "開啟為思維導圖文件",
"changeToOutline": "切換為大綱模式",
"changeToMindMap": "切換為思維導圖模式",
"printOutline": "列印大綱",
"import": "匯入",
"export": "匯出",
"saveAndUpdateImage": "儲存並更新圖像資料",
"insertCodeBlockToMd": "插入思維導圖程式碼區塊到當前文件",
"previewAsMindMap": "預覽為心智圖",
"changeToReadonly": "切換為只讀模式",
"changeToEdit": "切換為編輯模式"
},
"tip": {
"fileExist": "檔案已經存在",
"createMindMapFail": "新建思維導圖失敗",
"fileIsNotMd": "當前檔案不是 markdown 檔案",
"fileIsEmpty": "檔案內容為空",
"fileFormatError": "檔案格式錯誤",
"onlyEnableSelectCurrentVaultFile": "只允許新增當前倉庫的檔案",
"saving": "儲存中...",
"integerInputError": "請輸入大於 0 的數字",
"noPreviewImage": "沒有可預覽圖片",
"insertFail": "插入失敗",
"noMatchResult": "暫無匹配結果"
},
"setting": {
"themeMode": {
"title": "主題模式",
"desc": "深色、淺色模式",
"option1": "跟隨 Obsidian",
"option2": "淺色模式",
"option3": "深色模式"
},
"theme": {
"title": "預設主題",
"desc": "新建心智圖檔案時的默認主題"
},
"layout": {
"title": "預設結構",
"desc": "新建心智圖檔案時的默認結構"
},
"folder": {
"title4": "思維導圖文件存儲位置",
"desc4": "新建的SimpleMindMap文件存儲位置",
"title1": "自定義文件存儲目錄",
"desc1": "自定義文件存儲目錄,相對於倉庫根目錄",
"title5": "圖片存儲位置",
"desc5": "上傳的圖片文件(節點圖片、背景圖片)存儲位置",
"title2": "自定義圖片存儲目錄",
"desc2": "自定義圖片存儲目錄,相對於倉庫根目錄",
"title6": "自定義子文件夾",
"desc6": "自定義子文件夾,相對於當前文件所在文件夾",
"title7": "文件存儲位置",
"desc7": "節點超連結中選擇的本地文件存儲目錄",
"title3": "自定義文件存儲目錄",
"desc3": "自定義文件存儲目錄,相對於倉庫根目錄",
"option1": "倉庫的根目錄",
"option2": "指定文件夾",
"option3": "當前文件所在的文件夾",
"option4": "當前文件所在文件夾下指定的子文件夾"
},
"compress": {
"title1": "是否壓縮圖片",
"desc1": "是否壓縮上傳的節點圖片(從本地選擇的圖片)",
"title2": "最大壓縮寬度",
"desc2": "設定圖片壓縮後的最大寬度",
"title3": "最大壓縮高度",
"desc3": "設定圖片壓縮後的最大高度",
"title4": "圖片質量",
"desc4": "圖片壓縮後的質量僅對部分圖片格式有效比如jpg",
"curValue": "當前值",
"reset": "重置為預設值"
},
"autoSave": {
"title": "自動儲存時間",
"desc": "無操作自動儲存時間,單位:秒"
},
"codeBlock": {
"title": "程式碼區塊嵌入初始高度",
"desc": "smm 程式碼區塊方式嵌入時初始高度單位px"
},
"linkInfo": {
"issues": "提交bug或建議",
"desktop": "獲取獨立用戶端"
},
"embed": {
"title1": "嵌入預覽按兩下是否新窗口打開",
"desc1": "![[]]格式嵌入md檔案時按兩下預覽影像是否新窗口打開文件",
"title2": "嵌入預覽的圖像背景是否透明",
"desc2": "設定![[]]格式嵌入預覽的圖像背景是否透明"
},
"file": {
"title1": "新建思維導圖的檔案名稱前綴",
"desc1": "新建思維導圖檔案名稱預設的命名格式為:前綴 + 空格 + 日期時間戳",
"title2": "新建思維導圖的檔案名稱日期時間戳格式",
"desc2": "預設為YYYY-MM-DD HH.mm.ss實際範例2025-01-01 23.59.59如不清楚該格式的具體含義及如何修改請參考https://day.js.org/docs/en/parse/string-format"
},
"button": {
"select": "選擇"
}
}
}

561
plugin/main.js Normal file
View file

@ -0,0 +1,561 @@
import {
addIcon,
Plugin,
TFile,
TFolder,
Notice,
MarkdownView,
WorkspaceLeaf,
Workspace,
getLanguage
} from 'obsidian'
import './style.css'
import SmmEditView from './SmmEditView.js'
import {
SMM_VIEW_TYPE,
SIDE_BAR_ICON,
SMM_TAG,
DEFAULT_SETTINGS
} from './ob/constant.js'
import dayjs from 'dayjs'
import {
createDefaultText,
createDefaultMindMapData
} from './ob/metadataAndMarkdown.js'
import { around, dedupe } from 'monkey-around'
import { hideTargetMenu } from './ob/utils.js'
import MarkdownPostProcessor from './ob/MarkdownPostProcessor.js'
import SmmSettingTab from './ob/SmmSettingTab.js'
import { langList } from './src/config/zh'
import i18n from 'i18next'
import enTranslations from './locales/en.json'
import zhTranslations from './locales/zh.json'
import viTranslations from './locales/vi.json'
import zhtwTranslations from './locales/zhtw.json'
import { PreviewMindMap } from './ob/PreviewMindMap.js'
export default class SimpleMindMapPlugin extends Plugin {
async onload() {
// 添加设置
await this._addSetting()
// 初始化多语言
i18n.init({
lng: getLanguage() || 'en', // 自动检测用户语言
fallbackLng: 'en',
resources: {
en: { translation: enTranslations },
zh: { translation: zhTranslations },
vi: { translation: viTranslations },
['zh-TW']: { translation: zhtwTranslations }
}
})
addIcon('smm-icon', SIDE_BAR_ICON)
// 注册自定义视图
this.registerView(SMM_VIEW_TYPE, leaf => new SmmEditView(leaf, this))
// 添加 Ribbon 图标
this._createSmmFile = this._createSmmFile.bind(this)
this.addRibbonIcon(
'smm-icon',
this._t('action.createMindMap'), // 新建思维导图
this._createSmmFile
)
this._setCustomFileIcon()
// 添加命令
this._addCommands()
// 添加右键菜单
this._addFileMenus()
// 打补丁,拦截默认的打开方法
this._registerMonkeyPatches()
// 切换到思维导图视图
this._switchToSmmAfterLoad()
// 创建状态栏子元素
this._initStatusBar()
// 处理嵌入的思维导图
this.markdownPostProcessor = new MarkdownPostProcessor(this)
this.markdownPostProcessor.register()
// 记录打开文件的子路径,用于定位到指定节点
this.fileToSubpathMap = {}
}
// 创建思维导图文件
async _createSmmFile(folderPath = '', callback) {
try {
if (typeof folderPath !== 'string') {
folderPath = ''
}
let { fileNamePrefix, fileNameDateFormat } = this.settings
fileNamePrefix = fileNamePrefix || 'MindMap'
folderPath = this._getCreateFolderPath(folderPath)
await this._ensureDirectoryExists(folderPath)
const { vault } = this.app
const filePath = `${
folderPath ? folderPath + '/' : ''
}${fileNamePrefix} ${dayjs().format(fileNameDateFormat)}.smm.md`
const fileContent = createDefaultText(
filePath,
this._getCreateDefaultMindMapOptions()
)
try {
// 检查文件是否已存在
const existingFile = vault.getAbstractFileByPath(filePath)
if (existingFile) {
// 文件已经存在
new Notice(this._t('tip.fileExist'))
} else {
// 创建新文件
await vault.create(filePath, fileContent)
if (callback && typeof callback === 'function') {
callback(filePath)
} else {
await this.app.workspace.openLinkText(filePath, '', true)
}
}
} catch (error) {
// 新建思维导图失败
new Notice(this._t('tip.createMindMapFail'))
}
} catch (error) {
console.log(error)
// 新建思维导图失败
new Notice(this._t('tip.createMindMapFail'))
}
}
// 获取创建文件夹路径
_getCreateFolderPath(folderPath) {
if (folderPath) return folderPath
const { filePathType, filePath } = this.settings
switch (filePathType) {
case 'root':
return ''
case 'custom':
return filePath
case 'currentFileFolder':
return this._getActiveFileDirectory()
default:
return ''
}
}
// 添加命令
_addCommands() {
// 新建思维导图
this.addCommand({
id: 'create-smm-mindmap',
name: this._t('action.createMindMap'),
callback: async () => {
this._createSmmFile()
}
})
// 新建思维导图并插入当前文档
this.addCommand({
id: 'create-smm-mindmap-insert-markdown',
name: this._t('action.createMindMapInsertToMd'),
editorCallback: editor => {
this._createSmmFile('', fileName => {
try {
const file = this.app.vault.getAbstractFileByPath(fileName)
const currentFile = this.app.workspace.getActiveFile()
if (currentFile?.extension !== 'md') {
// 当前文件不是markdown文件
new Notice(this._t('tip.fileIsNotMd'))
return
}
const linkText = this.app.fileManager.generateMarkdownLink(
file,
currentFile?.path || ''
)
editor.replaceSelection('!' + linkText)
} catch (error) {
console.log(error)
// 新建思维导图失败
new Notice(this._t('tip.createMindMapFail'))
}
})
}
})
}
// 添加右键菜单
_addFileMenus() {
this.registerEvent(
this.app.workspace.on('file-menu', (menu, file) => {
if (file instanceof TFolder) {
// 新建思维导图
menu.addItem(item => {
item
.setTitle(this._t('action.createMindMap'))
.setIcon('smm-icon')
.onClick(() => {
this._createSmmFile(file.path)
})
})
} else if (file instanceof TFile) {
if (this._isSmmFile(file)) {
hideTargetMenu(menu, '在新窗口中打开')
hideTargetMenu(menu, '移动至新窗口')
// 打开为Markdown文档
menu.addItem(item =>
item
.setTitle(this._t('action.openAsMd'))
.setIcon('document')
.setSection('open')
.onClick(async () => {
await this.app.workspace.openLinkText(file.path, '', true)
const leaf = this.app.workspace.getLeaf(false)
const mdViewType = this.app.viewRegistry.getTypeByExtension(
'md'
)
await leaf.setViewState({
type: mdViewType,
state: {
...leaf.getViewState().state,
isSwitchToMarkdownViewFromSmmView: true
},
active: true
})
this.app.workspace.revealLeaf(leaf)
})
)
}
}
})
)
}
// 添加设置
async _addSetting() {
await this._loadSettings()
this.addSettingTab(new SmmSettingTab(this.app, this))
}
// 加载设置
async _loadSettings() {
const data = await this.loadData()
this.settings = Object.assign({}, DEFAULT_SETTINGS, data || {})
const obLang = getLanguage()
const target = langList.find(
item => item.value === obLang || item.alias === obLang
)
this.settings.lang = target ? target.value : 'en'
}
// 保存设置
async _saveSettings() {
await this.saveData(this.settings)
}
// 打补丁,拦截默认的打开方法
_registerMonkeyPatches() {
// 防止其他插件或 Obsidian 核心代码通过 getActiveViewOfType 获取到 SmmEditView 时产生冲突(例如误判为 Markdown 视图)
const key = 'https://github.com/wanglin2/mind-map'
this.register(
around(Workspace.prototype, {
getActiveViewOfType(old) {
return dedupe(key, old, function(...args) {
const result = old && old.apply(this, args)
const maybeLinkView = this.app?.workspace?.activeLeaf?.view
if (!maybeLinkView || !(maybeLinkView instanceof SmmEditView))
return result
})
}
})
)
// 背景Obsidian 的嵌套工作区(如拆分窗口或某些插件创建的容器)可能导致 WorkspaceLeaf 的根节点获取异常。原始 getRoot() 可能返回非最顶层的容器
/*
修复逻辑1.先调用原始 getRoot() 获取当前层级的根节点 top
2.检查 top.getRoot 方法是否与当前实例的 getRoot 相同
2.1如果相同说明 top 已是最顶层根节点直接返回
2.2如果不同说明 top 仍是某个子容器需递归调用 top.getRoot() 继续向上查找
*/
// 如果该插件已存在,则跳过补丁(因为 hover-editor 已实现相同功能),避免冲突
if (!this.app.plugins?.plugins?.['obsidian-hover-editor']) {
this.register(
around(WorkspaceLeaf.prototype, {
getRoot(old) {
return function() {
const top = old.call(this)
return top.getRoot === this.getRoot ? top : top.getRoot()
}
}
})
)
}
// 通过修改 Obsidian 核心的 WorkspaceLeaf.setViewState 方法,强制将特定文件定向到自定义视图
const self = this
this.register(
around(WorkspaceLeaf.prototype, {
detach(next) {
return function() {
return next.apply(this)
}
},
setViewState(next) {
return function(state, ...rest) {
// 手动将smm视图切换为md视图不用拦截、md的预览和源码视图也不拦截
if (
state.state?.isSwitchToMarkdownViewFromSmmView ||
['preview', 'source'].includes(state.state?.mode)
) {
return next.apply(this, [state, ...rest])
}
if (
self._loaded &&
state.type === 'markdown' &&
state.state?.file
) {
if (self._isSmmFile(state.state.file)) {
if (rest && rest[0] && rest[0].subpath) {
self.fileToSubpathMap[state.state.file] = rest[0].subpath
}
const newState = {
...state,
type: SMM_VIEW_TYPE
}
return next.apply(this, [newState, ...rest])
}
}
return next.apply(this, [state, ...rest])
}
}
})
)
// 在md视图下的smm文件右上角菜单增加切换为思维导图菜单
this.register(
around(MarkdownView.prototype, {
onPaneMenu(next) {
return function(menu, source) {
const res = next.apply(this, [menu, source])
if (self._isSmmFile(this.file)) {
if (source === 'more-options') {
// 打开为思维导图文档
menu.addItem(item =>
item
.setTitle(self._t('action.openAsMindMap'))
.setIcon('document')
.setSection('pane')
.onClick(() => {
self._setSmmView(this.leaf)
})
)
}
} else {
if (source === 'more-options') {
// 预览为思维导图
menu.addItem(item =>
item
.setTitle(self._t('action.previewAsMindMap'))
.setIcon('smm-icon')
.setSection('pane')
.onClick(() => {
let previewMindMap = new PreviewMindMap({
plugin: self,
file: this.file,
onClose: () => {
previewMindMap = null
}
})
})
)
}
}
return res
}
}
})
)
}
// 切换到思维导图视图
_switchToSmmAfterLoad() {
this.app.workspace.onLayoutReady(async () => {
let leaf
const markdownLeaf = this.app.workspace.getLeavesOfType('markdown')
for (leaf of markdownLeaf) {
if (
leaf.view instanceof MarkdownView &&
leaf.view.file &&
this._isSmmFile(leaf.view.file)
) {
this._setSmmView(leaf)
}
}
})
}
// 设置思维导图视图状态
async _setSmmView(leaf) {
await leaf.setViewState({
type: SMM_VIEW_TYPE,
state: leaf.view.getState(),
popstate: true
})
}
// 判断文件是否为思维导图
_isSmmFile(file) {
if (!file) {
return false
}
const isString = typeof file === 'string'
// 统一获取文件路径
const filePath = isString ? file : file.path
if (filePath.endsWith('.smm.md')) {
return true
}
let cache = null
if (isString) {
cache = this.app.metadataCache.getCache(file)
} else {
if (file.extension === SMM_VIEW_TYPE) {
return true
}
cache = this.app.metadataCache.getFileCache(file)
}
if (cache?.frontmatter?.tags?.contains(SMM_TAG)) {
return true
}
if (/\.smm.*\.md$/.test(filePath)) {
return true
}
return false
}
// 设置思维导图文件图标
_setCustomFileIcon() {
if (typeof this.app.vault.setConfigFileIcon === 'function') {
this.app.vault.setConfigFileIcon('smm.md', 'smm-icon')
} else {
}
}
// 创建状态栏子元素
_initStatusBar() {
// 创建状态栏主元素
this.statusBarItem = this.addStatusBarItem()
this.statusBarItem.empty()
this.statusBarItem.style.display = 'none' // 默认隐藏
// 创建专门用于显示 smm 文件状态的子元素
this.smmFileStatus = this.statusBarItem.createEl('div', {
cls: 'smm-file-status'
})
// 监听文件打开和视图变化
this.registerEvent(
this.app.workspace.on('file-open', this._updateStatusBar.bind(this))
)
this.registerEvent(
this.app.workspace.on(
'active-leaf-change',
this._updateStatusBar.bind(this)
)
)
// 初始更新
this._updateStatusBar()
}
// 更新状态栏显示
_updateStatusBar() {
const activeFile = this.app.workspace.getActiveFile()
// 检查是否是 smm 文件
const isSmmFile = activeFile && this._isSmmFile(activeFile)
// 获取状态栏容器
const statusBar = this.app.statusBar.containerEl
// 更新状态栏可见性
if (isSmmFile) {
this.statusBarItem.style.display = 'block'
// 添加隐藏默认状态栏的类
statusBar.classList.add('smm-file-status-active')
} else {
this.statusBarItem.style.display = 'none'
// 移除隐藏类
statusBar.classList.remove('smm-file-status-active')
}
}
// 确保目录存在
async _ensureDirectoryExists(dirPath) {
if (!dirPath) return
const { vault } = this.app
// 检查目录是否存在
const dir = vault.getAbstractFileByPath(dirPath)
if (!dir) {
// 递归创建目录
await vault.createFolder(dirPath)
}
}
// 多语言
_t(val) {
return i18n.t(val)
}
// 获取生成默认思维导图数据的配置
_getCreateDefaultMindMapOptions() {
return {
theme: this.settings.defaultTheme,
layout: this.settings.defaultLayout,
rootNodeDefaultText: this._t('common.rootNodeDefaultText'),
secondNodeDefaultText: this._t('common.secondNodeDefaultText'),
branchNodeDefaultText: this._t('common.branchNodeDefaultText')
}
}
// 根据参数生成默认思维导图数据
_createDefaultMindMapData() {
return createDefaultMindMapData(
this._getCreateDefaultMindMapOptions(),
false
)
}
// 获取激活文件的目录
_getActiveFileDirectory() {
// 获取当前激活文件
const activeFile = this.app.workspace.getActiveFile()
if (!activeFile) {
return null
}
// 检查是否为文件(排除文件夹)
if (activeFile instanceof TFolder) {
return null
}
// 获取父目录路径
const parent = activeFile.parent
if (!parent) {
return null
}
// 返回目录路径Vault 相对路径)
return parent.path
}
// 获取ob是否是暗黑模式
_getObIsDark() {
return document.body.classList.contains('theme-dark')
}
// 卸载时清理
onunload() {
this.app.workspace.detachLeavesOfType(SMM_VIEW_TYPE)
this.markdownPostProcessor.destroy()
// 清理状态栏
this.statusBarItem?.remove()
}
}

View file

@ -0,0 +1,265 @@
import { TFile } from 'obsidian'
import { parseMarkdownText } from './metadataAndMarkdown.js'
import { dataURItoBlob } from './utils.js'
import LZString from 'lz-string'
export default class MarkdownPostProcessor {
constructor(plugin) {
this.plugin = plugin
this.urlCache = new Map() // 文件路径 -> 图片URL的缓存
this.imageElements = new Map() // 文件路径 -> 图片元素集合
// 绑定事件处理器
this.handleFileModify = this.handleFileModify.bind(this)
this.handleFileDelete = this.handleFileDelete.bind(this)
// 注册文件监听
plugin.app.vault.on('modify', this.handleFileModify)
plugin.app.vault.on('delete', this.handleFileDelete)
}
destroy() {
// 清理事件监听
this.plugin.app.vault.off('modify', this.handleFileModify)
this.plugin.app.vault.off('delete', this.handleFileDelete)
// 释放所有URL对象
this.urlCache.forEach(url => URL.revokeObjectURL(url))
this.urlCache.clear()
this.imageElements.clear()
}
async handleFileModify(file) {
if (!(file instanceof TFile) || !this.plugin._isSmmFile(file)) return
try {
if (!this.urlCache.has(file.path)) {
return
}
// 重新生成图片URL
const data = await this.plugin.app.vault.read(file)
const parsedata = parseMarkdownText(data)
const svgBlob = dataURItoBlob(
LZString.decompressFromBase64(parsedata.svgdata)
)
const newUrl = URL.createObjectURL(svgBlob)
// 更新缓存
const oldUrl = this.urlCache.get(file.path)
if (oldUrl) URL.revokeObjectURL(oldUrl)
this.urlCache.set(file.path, newUrl)
// 更新所有关联的图片元素
const elements = this.imageElements.get(file.path) || new Set()
elements.forEach(img => {
img.src = newUrl
})
} catch (error) {
console.error('更新图片失败:', error)
}
}
handleFileDelete(file) {
if (!(file instanceof TFile)) return
// 清理被删除文件的资源
const url = this.urlCache.get(file.path)
if (url) {
URL.revokeObjectURL(url)
this.urlCache.delete(file.path)
this.imageElements.delete(file.path)
}
}
register() {
this.plugin.registerMarkdownPostProcessor(
this._markdownPostProcessor.bind(this)
)
}
async _markdownPostProcessor(el, ctx) {
try {
// 特殊卡片处理
if (this._isSpecialCard(el)) {
return this._processSpecialCard(el)
}
// 模式检测与处理
const embeddedItems = el.querySelectorAll('.internal-embed')
if (embeddedItems.length === 0) {
await this._processEditMode(el, ctx)
} else {
await this._processReadingMode(embeddedItems, ctx)
}
} catch (error) {
console.error('Markdown处理失败:', error)
}
}
_isSpecialCard(el) {
return (
el.hasClass('components--DynamicDataView-PageCardCoverPreviewContent') &&
el.children[0]?.getAttribute('data-heading') === 'metadata' &&
el.children[2]?.getAttribute('data-heading') === 'svgdata' &&
el.children[4]?.getAttribute('data-heading') === 'linkdata'
)
}
_processSpecialCard(el) {
el.classList.add('smmMindCard')
const svgdata = el.children[3].children[0].innerHTML
const url = URL.createObjectURL(dataURItoBlob(svgdata))
const img = this._createSvgImageElement(url)
el.replaceChildren(img)
}
async _processEditMode(el, ctx) {
const file = this.plugin.app.vault.getAbstractFileByPath(ctx.sourcePath)
if (!(file instanceof TFile) || !this.plugin._isSmmFile(file)) return
if (ctx.remainingNestLevel !== undefined && ctx.remainingNestLevel < 4)
return
let containerEl = this._findValidContainer(ctx.containerEl)
if (!containerEl || this._shouldSkipContainer(containerEl)) return
try {
const data = await this.plugin.app.vault.read(file)
const img = await this._createImageFromFile(file, data)
containerEl.empty()
if (img) {
containerEl.appendChild(img)
} else {
const emptyDiv = containerEl.createEl('div', { text: '没有可预览图片' })
emptyDiv.style.color = 'var(--text-muted)'
emptyDiv.style.border = '1px dashed var(--text-muted)'
emptyDiv.style.padding = '10px'
emptyDiv.style.borderRadius = '4px'
emptyDiv.style.textAlign = 'center'
emptyDiv.addEventListener('dblclick', () => {
const newWindow = this.plugin.settings.embedDblClickNewWindow
this.plugin.app.workspace.openLinkText(file?.path, '', newWindow)
})
}
if (containerEl.hasClass('markdown-embed')) {
containerEl.classList.remove('markdown-embed', 'inline-embed')
}
} catch (error) {
console.error(`处理编辑模式失败: ${file?.path}`, error)
}
}
async _processReadingMode(embeddedItems, ctx) {
for (const item of embeddedItems) {
try {
const fname = item.getAttribute('src')?.split('#')[0]
if (!fname) continue
const file = this.plugin.app.metadataCache.getFirstLinkpathDest(
fname,
ctx.sourcePath
)
if (!(file instanceof TFile) || !this.plugin._isSmmFile(file)) continue
const data = await this.plugin.app.vault.read(file)
const img = await this._createImageFromFile(file, data)
if (img) {
item.parentElement?.replaceChild(img, item)
}
} catch (error) {
console.error('处理嵌入项失败', error)
}
}
}
async _createImageFromFile(file, data) {
// 优先使用缓存
if (this.urlCache.has(file.path)) {
const url = this.urlCache.get(file.path)
return this._createSvgImageElement(url, file.path)
}
// 生成新URL并缓存
const parsedata = parseMarkdownText(data)
if (!parsedata.svgdata) {
return null
}
const svgBlob = dataURItoBlob(
LZString.decompressFromBase64(parsedata.svgdata)
)
const url = URL.createObjectURL(svgBlob)
this.urlCache.set(file.path, url)
const img = this._createSvgImageElement(url, file.path)
return img
}
_createSvgImageElement(url, filePath = '') {
const img = document.createElement('img')
img.src = url
img.draggable = false
if (filePath) {
// 添加文件路径标识
img.setAttribute('data-smm-file', filePath)
// 注册双击打开源文件
img.addEventListener('dblclick', () => {
const newWindow = this.plugin.settings.embedDblClickNewWindow
this.plugin.app.workspace.openLinkText(filePath, '', newWindow)
})
// 添加到元素追踪
if (!this.imageElements.has(filePath)) {
this.imageElements.set(filePath, new Set())
}
this.imageElements.get(filePath).add(img)
// 元素卸载时清理
const observer = new MutationObserver(() => {
if (!document.contains(img)) {
this.imageElements.get(filePath)?.delete(img)
observer.disconnect()
}
})
observer.observe(document.body, { subtree: true, childList: true })
}
return img
}
_findValidContainer(containerEl) {
const invalidClasses = [
'dataview',
'cm-preview-code-block',
'cm-embed-block'
]
while (containerEl) {
if (invalidClasses.some(cls => containerEl.classList.contains(cls))) {
return null
}
if (
containerEl.classList.contains('internal-embed') ||
containerEl.classList.contains('markdown-embed') ||
containerEl.classList.contains('markdown-reading-view')
) {
return containerEl
}
containerEl = containerEl.parentElement
}
return null
}
_shouldSkipContainer(containerEl) {
return (
containerEl.hasAttribute('ready') ||
['dataview', 'cm-preview-code-block', 'cm-embed-block'].some(cls =>
containerEl.classList.contains(cls)
)
)
}
}

View file

@ -0,0 +1,67 @@
import { initPreviewModeApp } from '../src/main'
export class PreviewMindMap {
constructor({ plugin, file, onClose }) {
this.app = plugin.app
this.plugin = plugin
this.file = file
this.onClose = onClose
this.previewModeApp = null
this.container = document.createElement('div')
this.wrap = document.createElement('div')
this.container.appendChild(this.wrap)
this.container.style.cssText = `
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 50;
background: rgba(0, 0, 0, 0.5);
`
document.body.appendChild(this.container)
this._renderView()
}
// 渲染思维导图
async _renderView() {
const content = await this.app.vault.read(this.file)
this.previewModeApp = initPreviewModeApp(this.wrap, {
getInitMindMapData: () => {
return content
},
getMindMapOptions: () => {
return {
readonly: true,
fit: true
}
},
getFile: () => {
return this.file
},
getSettings: () => {
return this.plugin.settings || {}
},
getMindMapLocalConfig: () => {
const { mindMapLocalConfig, themeMode } = this.plugin.settings
const config = mindMapLocalConfig || {}
config.isDark =
themeMode === 'follow'
? this.plugin._getObIsDark()
: themeMode === 'dark'
return config
}
})
this.previewModeApp.$bus.$on('closePreviewMode', this._close.bind(this))
}
_close() {
this.previewModeApp.$destroy()
document.body.removeChild(this.container)
this.previewModeApp = null
this.container = null
this.wrap = null
this.onClose()
}
}

590
plugin/ob/SmmSettingTab.js Normal file
View file

@ -0,0 +1,590 @@
import { PluginSettingTab, Setting, Notice } from 'obsidian'
import themeList from 'simple-mind-map-plugin-themes/themeList'
import { layoutGroupList } from '../src/config'
import { GITHUB_ICON, DESK_TOP_ICON } from './constant'
import { DEFAULT_SETTINGS } from './constant'
import { SuggestionModal } from './SuggestionModal'
const validateInteger = (value, defaultValue = 0, errorTip) => {
value = Number(value)
if (!Number.isNaN(value) && value > 0) {
return value
} else {
// 请输入大于0的数字
new Notice(errorTip)
return defaultValue
}
}
export default class SmmSettingTab extends PluginSettingTab {
constructor(app, plugin) {
super(app, plugin)
this.plugin = plugin
this.filePathSettings = null
this.imagePathSettings = null
this.imageSubPathSettings = null
this.attachmentPathSettings = null
this.attachmentSubPathSettings = null
this.compressImageOptionsMaxWidthSettings = null
this.compressImageOptionsMaxHeightSettings = null
this.compressImageOptionsQualitySettings = null
}
display() {
const { containerEl } = this
containerEl.empty()
this._addBaseSetting()
this._addFileSaveSetting()
this._addCompressSetting()
this._addEmbedSetting()
this._addHelpInfo()
}
// 基本设置
_addBaseSetting() {
const { containerEl } = this
containerEl.createEl('h2', { text: '基础' })
// 自动保存时间设置
new Setting(containerEl)
.setName(this.plugin._t('setting.autoSave.title')) // 自动保存时间
.setDesc(this.plugin._t('setting.autoSave.desc')) // 无操作自动保存时间,单位:秒
.addText(text => {
text
.setValue(String(this.plugin.settings.autoSaveTime))
.onChange(async value => {
value = validateInteger(
value,
DEFAULT_SETTINGS.autoSaveTime,
this.plugin._t('tip.integerInputError')
)
this.plugin.settings.autoSaveTime = value
await this.plugin._saveSettings()
})
})
// 主题模式设置
new Setting(containerEl)
.setName(this.plugin._t('setting.themeMode.title')) // 主题模式
.setDesc(this.plugin._t('setting.themeMode.desc')) // '设置深色、浅色模式'
.addDropdown(dropdown => {
;[
{
name: this.plugin._t('setting.themeMode.option1'), // 跟随obsidian
value: 'follow'
},
{
name: this.plugin._t('setting.themeMode.option2'), // 浅色模式
value: 'light'
},
{
name: this.plugin._t('setting.themeMode.option3'), // 深色模式
value: 'dark'
}
].forEach(item => {
dropdown.addOption(item.value, item.name)
})
dropdown
.setValue(this.plugin.settings.themeMode)
.onChange(async value => {
this.plugin.settings.themeMode = value
await this.plugin._saveSettings()
})
})
// 默认主题设置
const allThemeList = [
{
name: this.plugin._t('setting.theme.title'), // 默认主题
value: 'default',
dark: false
},
...themeList
].reverse()
// 默认主题
new Setting(containerEl)
.setName(this.plugin._t('setting.theme.title'))
.setDesc(this.plugin._t('setting.theme.desc')) // '设置默认主题'
.addDropdown(dropdown => {
allThemeList.forEach(item => {
dropdown.addOption(item.value, item.name)
})
dropdown
.setValue(this.plugin.settings.defaultTheme)
.onChange(async value => {
this.plugin.settings.defaultTheme = value
await this.plugin._saveSettings()
})
})
// 默认结构设置
const allLayoutList = []
;(layoutGroupList[this.plugin.settings.lang] || layoutGroupList.en).forEach(
item => {
allLayoutList.push(
...item.list.map((item2, index) => {
return {
name: item.name + (item.list.length > 1 ? index + 1 : ''),
value: item2
}
})
)
}
)
// 默认结构
new Setting(containerEl)
.setName(this.plugin._t('setting.layout.title'))
.setDesc(this.plugin._t('setting.layout.desc')) // '设置默认结构'
.addDropdown(dropdown => {
allLayoutList.forEach(item => {
dropdown.addOption(item.value, item.name)
})
dropdown
.setValue(this.plugin.settings.defaultLayout)
.onChange(async value => {
this.plugin.settings.defaultLayout = value
await this.plugin._saveSettings()
})
})
}
// 文件创建、保存相关设置
_addFileSaveSetting() {
const { containerEl } = this
containerEl.createEl('h2', { text: '文件' })
// 新建文件名的前缀
new Setting(containerEl)
.setName(this.plugin._t('setting.file.title1')) // 新建思维导图的文件名前缀
.setDesc(this.plugin._t('setting.file.desc1')) // 新建思维导图文件名默认的命名格式为:前缀 + 空格 + 日期时间戳
.addText(text => {
text
.setValue(this.plugin.settings.fileNamePrefix)
.onChange(async value => {
this.plugin.settings.fileNamePrefix = value
await this.plugin._saveSettings()
})
})
// 新建文件名的日期时间戳格式
const fileNameDateFormatSetting = new Setting(containerEl)
.setName(this.plugin._t('setting.file.title2')) // 新建思维导图的文件名日期时间戳格式
.setDesc(this.plugin._t('setting.file.desc2')) // 默认为YYYY-MM-DD HH.mm.ss实际示例2025-01-01 23.59.59如你不清楚该格式的具体含义及如何修改请参考https://day.js.org/docs/en/parse/string-format
.addText(text => {
text
.setValue(this.plugin.settings.fileNameDateFormat)
.onChange(async value => {
this.plugin.settings.fileNameDateFormat = value
await this.plugin._saveSettings()
})
})
fileNameDateFormatSetting.settingEl.className +=
' smm-setting-item-enable-select'
// 文件存储位置
new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title4')) // 文件存储位置
.setDesc(this.plugin._t('setting.folder.desc4')) // 设置SimpleMindMap文件存储位置默认为仓库根路径
.addDropdown(dropdown => {
this._getFilePathOptions().forEach(item => {
dropdown.addOption(item.value, item.name)
})
dropdown
.setValue(this.plugin.settings.filePathType)
.onChange(async value => {
this.plugin.settings.filePathType = value
await this.plugin._saveSettings()
this._updateFilePathSettingsVisibility()
})
})
// 文件存储路径设置
this.filePathSettings = new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title1')) // 文件存储路径
.setDesc(this.plugin._t('setting.folder.desc1')) // 设置SimpleMindMap文件存储路径默认为仓库根路径
.addText(text => {
text.setValue(this.plugin.settings.filePath).onChange(async value => {
this.plugin.settings.filePath = value
await this.plugin._saveSettings()
})
this._addFolderSelectBtn(text, selected => {
this.plugin.settings.filePath = selected
this.plugin._saveSettings()
})
})
this.filePathSettings.settingEl.className += ' smm-setting-sub-item'
this._updateFilePathSettingsVisibility()
// 图片存储位置
new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title5')) // 图片存储位置
.setDesc(this.plugin._t('setting.folder.desc5')) // 图片存储位置
.addDropdown(dropdown => {
this._getFilePathOptions(true).forEach(item => {
dropdown.addOption(item.value, item.name)
})
dropdown
.setValue(this.plugin.settings.imagePathType)
.onChange(async value => {
this.plugin.settings.imagePathType = value
await this.plugin._saveSettings()
this._updateImagePathSettingsVisibility()
})
})
// 自定义图片存储目录
this.imagePathSettings = new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title2')) // 图片存储路径
.setDesc(this.plugin._t('setting.folder.desc2')) // 设置上传的图片文件(节点图片、背景图片)存储路径
.addText(text => {
text.setValue(this.plugin.settings.imagePath).onChange(async value => {
this.plugin.settings.imagePath = value
await this.plugin._saveSettings()
})
this._addFolderSelectBtn(text, selected => {
this.plugin.settings.imagePath = selected
this.plugin._saveSettings()
})
})
this.imagePathSettings.settingEl.className += ' smm-setting-sub-item'
// 自定义子文件夹
this.imageSubPathSettings = new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title6')) // 图片存储路径
.setDesc(this.plugin._t('setting.folder.desc6')) // 设置上传的图片文件(节点图片、背景图片)存储路径
.addText(text => {
text
.setValue(this.plugin.settings.imageSubPath)
.onChange(async value => {
this.plugin.settings.imageSubPath = value
await this.plugin._saveSettings()
})
this._addFolderSelectBtn(text, selected => {
this.plugin.settings.imageSubPath = selected
this.plugin._saveSettings()
})
})
this.imageSubPathSettings.settingEl.className += ' smm-setting-sub-item'
this._updateImagePathSettingsVisibility()
// 附件存储位置
new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title7'))
.setDesc(this.plugin._t('setting.folder.desc7'))
.addDropdown(dropdown => {
this._getFilePathOptions(true).forEach(item => {
dropdown.addOption(item.value, item.name)
})
dropdown
.setValue(this.plugin.settings.attachmentPathType)
.onChange(async value => {
this.plugin.settings.attachmentPathType = value
await this.plugin._saveSettings()
this._updateAttachmentPathSettingsVisibility()
})
})
// 附件存储路径设置
this.attachmentPathSettings = new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title3'))
.setDesc(this.plugin._t('setting.folder.desc3'))
.addText(text => {
text
.setValue(this.plugin.settings.attachmentPath)
.onChange(async value => {
this.plugin.settings.attachmentPath = value
await this.plugin._saveSettings()
})
this._addFolderSelectBtn(text, selected => {
this.plugin.settings.attachmentPath = selected
this.plugin._saveSettings()
})
})
this.attachmentPathSettings.settingEl.className += ' smm-setting-sub-item'
// 自定义子文件夹
this.attachmentSubPathSettings = new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title6'))
.setDesc(this.plugin._t('setting.folder.desc6'))
.addText(text => {
text
.setValue(this.plugin.settings.attachmentSubPath)
.onChange(async value => {
this.plugin.settings.attachmentSubPath = value
await this.plugin._saveSettings()
})
this._addFolderSelectBtn(text, selected => {
this.plugin.settings.attachmentSubPath = selected
this.plugin._saveSettings()
})
})
this.attachmentSubPathSettings.settingEl.className +=
' smm-setting-sub-item'
this._updateAttachmentPathSettingsVisibility()
}
// 图片压缩设置
_addCompressSetting() {
const { containerEl } = this
containerEl.createEl('h2', { text: '图片压缩' })
// 是否压缩图片设置
new Setting(containerEl)
.setName(this.plugin._t('setting.compress.title1')) // 是否压缩图片
.setDesc(this.plugin._t('setting.compress.desc1')) // 设置上传的图片文件(节点图片、背景图片)存储路径
.addToggle(toggle => {
toggle
.setValue(this.plugin.settings.compressImage)
.onChange(async value => {
this.plugin.settings.compressImage = value
await this.plugin._saveSettings()
this._updateCompressImageSettingsVisibility()
})
})
// 压缩参数设置
this.compressImageOptionsMaxWidthSettings = new Setting(containerEl)
.setName(this.plugin._t('setting.compress.title2')) // 最大压缩宽度
.setDesc(this.plugin._t('setting.compress.desc2')) // 设置图片压缩后的最大宽度
.addText(text => {
text
.setValue(String(this.plugin.settings.compressImageOptionsMaxWidth))
.onChange(async value => {
value = validateInteger(
value,
DEFAULT_SETTINGS.compressImageOptionsMaxWidth,
this.plugin._t('tip.integerInputError')
)
this.plugin.settings.compressImageOptionsMaxWidth = value
await this.plugin._saveSettings()
})
})
this.compressImageOptionsMaxWidthSettings.settingEl.className +=
' smm-setting-sub-item'
this.compressImageOptionsMaxHeightSettings = new Setting(containerEl)
.setName(this.plugin._t('setting.compress.title3')) // 最大压缩高度
.setDesc(this.plugin._t('setting.compress.desc3')) // 设置图片压缩后的最大高度
.addText(text => {
text
.setValue(String(this.plugin.settings.compressImageOptionsMaxHeight))
.onChange(async value => {
value = validateInteger(
value,
DEFAULT_SETTINGS.compressImageOptionsMaxHeight,
this.plugin._t('tip.integerInputError')
)
this.plugin.settings.compressImageOptionsMaxHeight = value
await this.plugin._saveSettings()
})
})
this.compressImageOptionsMaxHeightSettings.settingEl.className +=
' smm-setting-sub-item'
this.compressImageOptionsQualitySettings = new Setting(containerEl)
.setName(this.plugin._t('setting.compress.title4')) // 图片质量
.setDesc(
`${this.plugin._t('setting.compress.desc4')}${this.plugin._t(
'setting.compress.curValue'
)}: ${this.plugin.settings.compressImageOptionsQuality}`
) // 显示当前值
.addSlider(slider =>
slider
.setLimits(0, 1, 0.1) // 最小值0最大值1步长0.1
.setValue(this.plugin.settings.compressImageOptionsQuality)
.onChange(async value => {
this.plugin.settings.compressImageOptionsQuality = value
this.compressImageOptionsQualitySettings?.setDesc(
`${this.plugin._t('setting.compress.desc4')}${this.plugin._t(
'setting.compress.curValue'
)}: ${value}`
)
await this.plugin._saveSettings()
})
)
.addExtraButton(button =>
button
.setIcon('reset')
.setTooltip(this.plugin._t('setting.compress.reset'))
.onClick(async () => {
const defaultValue = DEFAULT_SETTINGS.compressImageOptionsQuality
this.plugin.settings.compressImageOptionsQuality = defaultValue
const sliderEl = this.compressImageOptionsQualitySettings
?.components[0]
if (sliderEl) {
sliderEl.setValue(defaultValue)
this.plugin.settings.compressImageOptionsQuality = defaultValue
this.compressImageOptionsQualitySettings?.setDesc(
`${this.plugin._t(
'setting.compress.curValue'
)}: ${defaultValue}`
)
}
await this.plugin._saveSettings()
})
)
this.compressImageOptionsQualitySettings.settingEl.className +=
' smm-setting-sub-item'
this._updateCompressImageSettingsVisibility()
}
// 嵌入设置
_addEmbedSetting() {
const { containerEl } = this
containerEl.createEl('h2', { text: '嵌入' })
// 嵌入预览的图像背景是否透明
new Setting(containerEl)
.setName(this.plugin._t('setting.embed.title2')) // 嵌入预览的图像背景是否透明
.setDesc(this.plugin._t('setting.embed.desc2')) // 嵌入预览的图像背景是否透明
.addToggle(toggle => {
toggle
.setValue(this.plugin.settings.compressImageIsTransparent)
.onChange(async value => {
this.plugin.settings.compressImageIsTransparent = value
await this.plugin._saveSettings()
})
})
// 嵌入预览双击是否新窗口打开
new Setting(containerEl)
.setName(this.plugin._t('setting.embed.title1')) // 嵌入预览双击是否新窗口打开
.setDesc(this.plugin._t('setting.embed.desc1')) // ![[]]格式嵌入md文档时双击预览图像是否新窗口打开文件
.addToggle(toggle => {
toggle
.setValue(this.plugin.settings.embedDblClickNewWindow)
.onChange(async value => {
this.plugin.settings.embedDblClickNewWindow = value
await this.plugin._saveSettings()
})
})
}
// 给目录输入框控件添加选择按钮
_addFolderSelectBtn(text, callback = () => {}) {
const inputEl = text.inputEl
const suggestionButton = inputEl.parentElement?.createEl('button', {
text: this.plugin._t('setting.button.select'),
cls: 'suggestion-button'
})
suggestionButton?.addEventListener('click', () => {
new SuggestionModal({
plugin: this.plugin,
type: 'folder',
app: this.app,
onSelect: selected => {
text.setValue(selected)
inputEl.focus()
callback(selected)
}
}).open()
})
}
// 获取文件路径选项
_getFilePathOptions(full = false) {
const res = [
{
name: this.plugin._t('setting.folder.option1'), // 仓库的根目录
value: 'root'
},
{
name: this.plugin._t('setting.folder.option2'), // 指定文件夹
value: 'custom'
},
{
name: this.plugin._t('setting.folder.option3'), // 当前文件所在的文件夹
value: 'currentFileFolder'
}
]
if (full) {
res.push({
name: this.plugin._t('setting.folder.option4'), // 当前文件所在的文件夹的子文件夹
value: 'currentFileFolderSubFolder'
})
}
return res
}
// 切换文件路径设置的显示状态
_updateFilePathSettingsVisibility() {
const isVisible = this.plugin.settings.filePathType === 'custom'
if (this.filePathSettings) {
this.filePathSettings.settingEl.style.display = isVisible ? '' : 'none'
}
}
// 切换图片路径设置的显示状态
_updateImagePathSettingsVisibility() {
const isVisible = this.plugin.settings.imagePathType === 'custom'
if (this.imagePathSettings) {
this.imagePathSettings.settingEl.style.display = isVisible ? '' : 'none'
}
const isVisibleSub =
this.plugin.settings.imagePathType === 'currentFileFolderSubFolder'
if (this.imageSubPathSettings) {
this.imageSubPathSettings.settingEl.style.display = isVisibleSub
? ''
: 'none'
}
}
// 切换附件路径设置的显示状态
_updateAttachmentPathSettingsVisibility() {
const isVisible = this.plugin.settings.attachmentPathType === 'custom'
if (this.attachmentPathSettings) {
this.attachmentPathSettings.settingEl.style.display = isVisible
? ''
: 'none'
}
const isVisibleSub =
this.plugin.settings.attachmentPathType === 'currentFileFolderSubFolder'
if (this.attachmentSubPathSettings) {
this.attachmentSubPathSettings.settingEl.style.display = isVisibleSub
? ''
: 'none'
}
}
// 切换压缩图片设置的显示状态
_updateCompressImageSettingsVisibility() {
const isVisible = this.plugin.settings.compressImage
if (this.compressImageOptionsMaxWidthSettings) {
this.compressImageOptionsMaxWidthSettings.settingEl.style.display = isVisible
? ''
: 'none'
}
if (this.compressImageOptionsMaxHeightSettings) {
this.compressImageOptionsMaxHeightSettings.settingEl.style.display = isVisible
? ''
: 'none'
}
if (this.compressImageOptionsQualitySettings) {
this.compressImageOptionsQualitySettings.settingEl.style.display = isVisible
? ''
: 'none'
}
}
// 添加辅助信息
_addHelpInfo() {
const { containerEl } = this
const linkEl = containerEl.createDiv('setting-item smm-setting-link-list')
linkEl.innerHTML = `
<div class="smm-setting-link-item">
<a href="https://github.com/wanglin2/obsidian-simplemindmap/issues" target="_blank">
${GITHUB_ICON}
<span>${this.plugin._t('setting.linkInfo.issues')}</span>
</a>
</div>
<div class="smm-setting-link-item">
<a href="https://github.com/wanglin2/mind-map/releases" target="_blank">
${DESK_TOP_ICON}
<span>${this.plugin._t('setting.linkInfo.desktop')}</span>
</a>
</div>
`
}
}

View file

@ -0,0 +1,40 @@
import { SuggestModal } from 'obsidian'
export class SuggestionModal extends SuggestModal {
constructor({ plugin, app, getSuggestions, onSelect, type }) {
super(app)
this.plugin = plugin
this.emptyStateText = this.plugin._t('tip.noMatchResult')
this.type = type // folder选择目录
if (this.type === 'folder') {
this.getSuggestions = this._queryFolders.bind(this)
} else {
this.getSuggestions = getSuggestions
}
this.onSelect = onSelect
}
// 查询目录
_queryFolders(query) {
const list = this.app.vault.getAllFolders()
return list
.filter(item => {
return item.path.toLowerCase().includes(query)
})
.map(item => {
return item.path
})
}
getSuggestions(query) {
return this.getSuggestions(query)
}
renderSuggestion(suggestion, el) {
el.createEl('div', { text: suggestion })
}
onChooseSuggestion(suggestion) {
this.onSelect(suggestion)
}
}

74
plugin/ob/constant.js Normal file
View file

@ -0,0 +1,74 @@
export const SMM_VIEW_TYPE = 'smm'
export const SMM_TAG = 'simplemindmap'
export const getDefaultSmmData = (options = {}) => {
const theme = options.theme || 'classic13'
const layout = options.layout || 'logicalStructure'
const rootNodeDefaultText = options.rootNodeDefaultText || 'Root Node' // 根节点
const secondNodeDefaultText = options.secondNodeDefaultText || 'Second Node' // 二级节点
const branchNodeDefaultText = options.branchNodeDefaultText || 'Branch Node' // 分支主题
return {
root: {
data: { text: rootNodeDefaultText },
children: [
{
data: { text: secondNodeDefaultText },
children: [
{ data: { text: branchNodeDefaultText }, children: [] },
{ data: { text: branchNodeDefaultText }, children: [] }
]
}
]
},
theme: { template: theme, config: {} },
layout
}
}
export const DEFAULT_SETTINGS = {
isFirstUse: true,// 是否是第一次使用插件
fileNamePrefix: 'MindMap', // 新建思维导图的文件名前缀
fileNameDateFormat: 'YYYY-MM-DD HH.mm.ss', // 新建思维导图的文件名日期时间戳格式
lang: 'zh', // 语言
themeMode: 'follow', // 主题模式
defaultLayout: 'logicalStructure', // 默认布局
defaultTheme: 'classic13', // 默认主题
filePathType: 'root', // 文件存储位置
filePath: '', // 文件存储路径
imagePathType: 'currentFileFolder', // 图片存储位置
imagePath: '', // 图片存储路径
imageSubPath: '', // 自定义子文件夹
attachmentPathType: 'currentFileFolder', // 附件存储位置
attachmentPath: '', // 附件存储路径
attachmentSubPath: '', // 自定义子文件夹
compressImage: true, // 是否压缩图片
compressImageOptionsMaxWidth: 1200, // 图片压缩后的最大宽度
compressImageOptionsMaxHeight: 1200, // 图片压缩后的最大高度
compressImageOptionsQuality: 0.8, // 图片质量
attachmentPath: 'assets/files', // 附件存储路径
compressImageIsTransparent: false, // 嵌入预览的图像背景是否透明
embedDblClickNewWindow: true, // 嵌入预览双击是否新窗口打开
autoSaveTime: 5, // 无操作自动保存时间单位s
mindMapConfig: null,
mindMapLocalConfig: null,
codeBlockInitHeight: 300 // smm代码块方式嵌入时初始高度单位px
}
export const SIDE_BAR_ICON = `<svg viewBox="0 0 1026 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M981.333333 473.173333H564.053333a42.666667 42.666667 0 0 0 0 85.333334h417.28a42.666667 42.666667 0 0 0 0-85.333334zM981.333333 838.186667H564.053333a42.666667 42.666667 0 0 0 0 85.333333h417.28a42.666667 42.666667 0 0 0 0-85.333333zM564.053333 193.493333h417.28a42.666667 42.666667 0 0 0 0-85.333333H564.053333a42.666667 42.666667 0 0 0 0 85.333333zM398.293333 515.84a42.666667 42.666667 0 0 0-42.666666-42.666667h-89.173334a526.933333 526.933333 0 0 0 27.52-117.12c13.653333-88.96 26.24-149.333333 75.093334-164.906666a42.666667 42.666667 0 1 0-27.093334-80.853334c-101.76 33.92-118.826667 144.213333-132.48 232.746667-15.146667 99.2-25.813333 130.133333-62.506666 130.133333H42.666667a42.666667 42.666667 0 0 0 0 85.333334h104.32c36.693333 0 47.36 30.933333 62.506666 130.133333 13.653333 88.533333 30.72 198.613333 132.48 232.746667a42.666667 42.666667 0 0 0 13.653334 2.133333 42.666667 42.666667 0 0 0 13.44-83.2c-48.853333-16.213333-61.44-75.733333-75.093334-164.693333a526.933333 526.933333 0 0 0-27.52-117.12h89.173334a42.666667 42.666667 0 0 0 42.666666-42.666667z" fill="currentColor"></path></svg>`
export const SAVE_ICON = `<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="256" height="256" class="svg-icon"><path d="M486.577954 156.09136h101.688183v203.376366a101.688183 101.688183 0 0 1-101.688183 101.688183h-152.532274a101.688183 101.688183 0 0 1-101.688182-101.688183v-203.376366h101.688182v203.376366h152.532274z m-279.642502-101.688182H610.129096a152.532274 152.532274 0 0 1 108.806356 47.285005l208.460774 217.612711a152.532274 152.532274 0 0 1 42.200596 105.247269v392.516385a152.532274 152.532274 0 0 1-152.532274 152.532274h-610.129096a152.532274 152.532274 0 0 1-152.532274-152.532274v-610.129096a152.532274 152.532274 0 0 1 152.532274-152.532274z m0 101.688182a50.844091 50.844091 0 0 0-50.844092 50.844092v610.129096a50.844091 50.844091 0 0 0 50.844092 50.844092h610.129096a50.844091 50.844091 0 0 0 50.844092-50.844092V424.548163a50.844091 50.844091 0 0 0-14.236346-35.082423L645.71996 171.853029a50.844091 50.844091 0 0 0-35.590864-15.761669z" fill="currentColor"></path></svg>`
export const IMPORT_ICON = `<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="256" height="256" class="svg-icon"><path d="M112.64 896a48.704 48.704 0 0 1-48.576-48.768V175.936a48.064 48.064 0 0 1 47.936-48H512a48.064 48.064 0 0 1 0 96H160v576h704V537.92a48.064 48.064 0 0 1 96 0v309.952a48.064 48.064 0 0 1-48.128 47.936z m409.6-192h-1.792a47.616 47.616 0 0 1-34.048-16.064 40.064 40.064 0 0 1-2.624-3.136l-89.6-119.872a48 48 0 0 1 76.8-57.6l22.016 29.312a698.624 698.624 0 0 1 107.136-216.384c90.56-123.84 201.6-192 312.512-192a48.064 48.064 0 1 1 0 96 318.144 318.144 0 0 0-234.88 152.704 618.624 618.624 0 0 0-86.976 168.256l23.104-17.344a48 48 0 1 1 57.6 76.8l-117.696 88.192a47.552 47.552 0 0 1-22.656 10.688h-8.512z" fill="currentColor"></path></svg>`
export const EXPORT_ICON = `<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="256" height="256" class="svg-icon" stroke="currentColor"><path d="M849.2 599v217H178.5V599c-0.7-23.7-20.1-42.7-44-42.7s-43.3 19-44 42.7v252.5c0 28.9 23.6 52.5 52.5 52.5h741.7c28.9 0 52.5-23.6 52.5-52.5V599c-0.7-23.7-20.1-42.7-44-42.7s-43.3 19-44 42.7z" fill="currentColor"></path><path d="M482.7 135.4l-164 164c-17.1 17.1-17.1 45.1 0 62.2s45.1 17.1 62.2 0l85.7-85.7v314.8c0 26 21.3 47.2 47.2 47.2 26 0 47.2-21.3 47.2-47.2V276l85.7 85.7c17.1 17.1 45.1 17.1 62.2 0s17.1-45.1 0-62.2l-164-164c-17.1-17.2-45.1-17.2-62.2-0.1z" fill="currentColor"></path></svg>`
export const OUTLINE_ICON = `<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="256" height="256" class="svg-icon" stroke="currentColor"><path d="M128 96h512a64 64 0 0 1 64 64v64a64 64 0 0 1-64 64H128a64 64 0 0 1-64-64V160a64 64 0 0 1 64-64z m32 64a32 32 0 1 0 0 64h448a32 32 0 0 0 0-64H160z m224 576h512a64 64 0 0 1 64 64v64a64 64 0 0 1-64 64H384a64 64 0 0 1-64-64v-64a64 64 0 0 1 64-64z m32 64a32 32 0 0 0 0 64h448a32 32 0 0 0 0-64H416z m-32-384h512a64 64 0 0 1 64 64v64a64 64 0 0 1-64 64H384a64 64 0 0 1-64-64v-64a64 64 0 0 1 64-64z m32 64a32 32 0 0 0 0 64h448a32 32 0 0 0 0-64H416z" fill="currentColor"></path></svg>`
export const MINDMAP_ICON = `<svg viewBox="0 0 1026 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="256" height="256" class="svg-icon" stroke="currentColor"><path d="M981.333333 473.173333H564.053333a42.666667 42.666667 0 0 0 0 85.333334h417.28a42.666667 42.666667 0 0 0 0-85.333334zM981.333333 838.186667H564.053333a42.666667 42.666667 0 0 0 0 85.333333h417.28a42.666667 42.666667 0 0 0 0-85.333333zM564.053333 193.493333h417.28a42.666667 42.666667 0 0 0 0-85.333333H564.053333a42.666667 42.666667 0 0 0 0 85.333333zM398.293333 515.84a42.666667 42.666667 0 0 0-42.666666-42.666667h-89.173334a526.933333 526.933333 0 0 0 27.52-117.12c13.653333-88.96 26.24-149.333333 75.093334-164.906666a42.666667 42.666667 0 1 0-27.093334-80.853334c-101.76 33.92-118.826667 144.213333-132.48 232.746667-15.146667 99.2-25.813333 130.133333-62.506666 130.133333H42.666667a42.666667 42.666667 0 0 0 0 85.333334h104.32c36.693333 0 47.36 30.933333 62.506666 130.133333 13.653333 88.533333 30.72 198.613333 132.48 232.746667a42.666667 42.666667 0 0 0 13.653334 2.133333 42.666667 42.666667 0 0 0 13.44-83.2c-48.853333-16.213333-61.44-75.733333-75.093334-164.693333a526.933333 526.933333 0 0 0-27.52-117.12h89.173334a42.666667 42.666667 0 0 0 42.666666-42.666667z" fill="currentColor"></path></svg>`
export const PRINT_ICON = `<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="256" height="256" class="svg-icon" stroke="currentColor"><path d="M864 352V154.7c0-17.1-6.8-33.4-18.9-45.4l-91.4-90.7C741.7 6.7 725.5 0 708.6 0H160v352H96c-53 0-96 43-96 96v384h160v128c0 35.3 28.7 64 64 64h576c35.3 0 64-28.7 64-64V832h160V352H864zM224 64h478c4.2 0 8.3 1.7 11.3 4.6l82 81.3c3 3 4.7 7.1 4.7 11.4V528H224V64z m544 896H256c-17.7 0-32-14.3-32-32V720h576v208c0 17.7-14.3 32-32 32z m192-192h-96V656H160v112H64V448c0-17.7 14.3-32 32-32h64v176h704V416h96v352z" fill="currentColor"></path><path d="M912 432c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" fill="currentColor"></path></svg>`
export const GITHUB_ICON = `<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="48" height="48" stroke="currentColor"><path d="M511.957333 21.333333C241.024 21.333333 21.333333 240.981333 21.333333 512c0 216.832 140.544 400.725333 335.573334 465.664 24.490667 4.394667 32.256-10.069333 32.256-23.082667 0-11.690667 0.256-44.245333 0-85.205333-136.448 29.610667-164.736-64.64-164.736-64.64-22.314667-56.704-54.4-71.765333-54.4-71.765333-44.586667-30.464 3.285333-29.824 3.285333-29.824 49.194667 3.413333 75.178667 50.517333 75.178667 50.517333 43.776 75.008 114.816 53.333333 142.762666 40.789333 4.522667-31.658667 17.152-53.376 31.189334-65.536-108.970667-12.458667-223.488-54.485333-223.488-242.602666 0-53.546667 19.114667-97.322667 50.517333-131.669334-5.034667-12.330667-21.930667-62.293333 4.778667-129.834666 0 0 41.258667-13.184 134.912 50.346666a469.802667 469.802667 0 0 1 122.88-16.554666c41.642667 0.213333 83.626667 5.632 122.88 16.554666 93.653333-63.488 134.784-50.346667 134.784-50.346666 26.752 67.541333 9.898667 117.504 4.864 129.834666 31.402667 34.346667 50.474667 78.122667 50.474666 131.669334 0 188.586667-114.730667 230.016-224.042666 242.090666 17.578667 15.232 33.578667 44.672 33.578666 90.453334v135.850666c0 13.141333 7.936 27.605333 32.853334 22.869334C862.250667 912.597333 1002.666667 728.746667 1002.666667 512 1002.666667 240.981333 783.018667 21.333333 511.957333 21.333333z" fill="currentColor"></path></svg>`
export const DESK_TOP_ICON = `<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="48" height="48" stroke="currentColor"><path d="M958.92 739.73H65.08c-18.26 0-33.08-14.8-33.08-33.08V79.38C32 61.11 46.82 46.3 65.08 46.3h893.85c18.26 0 33.08 14.8 33.08 33.08v627.27c-0.01 18.28-14.83 33.08-33.09 33.08zM98.15 673.58h827.69V112.46H98.15v561.12z" fill="currentColor" p-id="5963"></path><path d="M512 977.7c-18.26 0-33.08-14.8-33.08-33.08V713.63c0-18.27 14.82-33.08 33.08-33.08s33.08 14.8 33.08 33.08v230.99c0 18.27-14.82 33.08-33.08 33.08z" fill="currentColor"></path><path d="M762.01 977.7H261.96c-18.26 0-33.08-14.8-33.08-33.08 0-18.27 14.82-33.08 33.08-33.08h500.05c18.26 0 33.08 14.8 33.08 33.08 0 18.27-14.82 33.08-33.08 33.08zM547.25 506.22c-8.46 0-16.93-3.23-23.39-9.69-12.92-12.91-12.92-33.86 0-46.77l88.4-88.4c12.92-12.92 33.85-12.92 46.77 0 12.92 12.91 12.92 33.86 0 46.77l-88.4 88.4c-6.45 6.46-14.92 9.69-23.38 9.69zM331.78 506.22c-8.46 0-16.93-3.23-23.39-9.69-12.92-12.91-12.92-33.86 0-46.77l187.52-187.52c12.92-12.92 33.85-12.92 46.77 0 12.92 12.91 12.92 33.86 0 46.77L355.17 496.53c-6.46 6.46-14.93 9.69-23.39 9.69z" fill="currentColor"></path></svg>`

View file

@ -0,0 +1,121 @@
import { getDefaultSmmData, SMM_TAG } from './constant'
import LZString from 'lz-string'
export const parseMarkdownText = text => {
const result = {
metadata: { path: '', tags: [], content: '' },
svgdata: '',
linkdata: []
}
// Split text into lines
const lines = text.split('\n')
let currentSection = ''
let inCodeBlock = false
let inYamlHeader = false
let codeBlockContent = []
for (const line of lines) {
// Handle YAML header
if (line.trim() === '---') {
inYamlHeader = !inYamlHeader
continue
}
// Check for section headers
if (line.startsWith('# metadata')) {
currentSection = 'metadata'
continue
} else if (line.startsWith('# svgdata')) {
currentSection = 'svgdata'
continue
} else if (line.startsWith('# linkdata')) {
currentSection = 'linkdata'
continue
}
// Handle code blocks
if (line.trim() === '```metadata' || line.trim() === '```svgData') {
inCodeBlock = true
continue
} else if (line.trim() === '```' && inCodeBlock) {
inCodeBlock = false
if (currentSection === 'metadata') {
result.metadata.content = codeBlockContent.join('\n')
codeBlockContent = []
} else if (currentSection === 'svgdata') {
result.svgdata = codeBlockContent.join('\n')
if (result.svgdata == undefined) {
result.svgdata = ''
}
codeBlockContent = []
}
continue
}
// Collect content
if (inCodeBlock) {
codeBlockContent.push(line)
} else if (currentSection === 'linkdata' && line.startsWith('- ')) {
result.linkdata.push(line.replace('- ', '').trim())
} else if (inYamlHeader) {
// Parse YAML metadata
if (line.startsWith('path:')) {
result.metadata.path = line.split(':')[1].trim()
} else if (line.startsWith(' -')) {
result.metadata.tags.push(line.replace(' -', '').trim())
}
}
}
return result
}
export const assembleMarkdownText = obj => {
let result = '---\n'
// Assemble YAML header
result += `path: ${obj.metadata.path}\n`
result += 'tags:\n'
for (const tag of obj.metadata.tags) {
result += ` - ${tag}\n`
}
result += '---\n'
// Assemble metadata section
result += '# metadata\n'
result += '```metadata\n'
result += obj.metadata.content
result += '\n```\n'
// Assemble svgdata section
result += '# svgdata\n'
result += '```svgData\n'
result += obj.svgdata
result += '\n```\n'
// Assemble linkdata section
result += '# linkdata\n'
for (const item of obj.linkdata) {
result += `- ${item}\n`
}
return result
}
export const createDefaultMindMapData = (options, isCompress = true) => {
const content = JSON.stringify(getDefaultSmmData(options))
return isCompress ? LZString.compressToBase64(content) : content
}
export const createDefaultText = (filePath, options) => {
return assembleMarkdownText({
metadata: {
path: `${filePath || ''}`,
tags: [SMM_TAG],
content: createDefaultMindMapData(options)
},
svgdata: '',
linkdata: []
})
}

65
plugin/ob/utils.js Normal file
View file

@ -0,0 +1,65 @@
// 极简的深拷贝
export const simpleDeepClone = data => {
try {
return JSON.parse(JSON.stringify(data))
} catch (error) {
return null
}
}
export const generateRandomString = (
length = 12,
charSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
) => {
// 参数验证
if (typeof length !== 'number' || length <= 0) {
throw new Error('长度必须是正整数')
}
if (typeof charSet !== 'string' || charSet.length === 0) {
throw new Error('字符集不能为空')
}
// 使用加密安全的随机数生成器(如果可用)
let randomValues
if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
randomValues = new Uint32Array(length)
crypto.getRandomValues(randomValues)
} else {
randomValues = new Array(length)
.fill(0)
.map(() => Math.random() * 0x100000000)
}
// 生成随机字符串
let result = ''
for (let i = 0; i < length; i++) {
const randomIndex = randomValues[i] % charSet.length
result += charSet.charAt(randomIndex)
}
return result
}
export const hideTargetMenu = (menu, text = '在新窗口中打开') => {
// 隐藏特定默认菜单项
menu.items.forEach(item => {
// 通过菜单项标题或ID识别要隐藏的项
if (item.title === text || item.dom?.innerText?.includes(text)) {
item.dom.hide()
}
})
}
export const dataURItoBlob = dataURI => {
const byteString = atob(dataURI.split(',')[1])
const mimeString = dataURI
.split(',')[0]
.split(':')[1]
.split(';')[0]
const ab = new ArrayBuffer(byteString.length)
const ia = new Uint8Array(ab)
for (let i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i)
}
return new Blob([ab], { type: mimeString })
}

12736
plugin/package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

77
plugin/package.json Normal file
View file

@ -0,0 +1,77 @@
{
"name": "obsidian-simple-mind-map",
"version": "0.1.0",
"private": true,
"scripts": {
"build": "cross-env NODE_ENV=production webpack --mode production",
"dev": "cross-env NODE_ENV=development webpack --watch --mode development",
"lint": "vue-cli-service lint",
"format": "prettier --write src/* src/*/* src/*/*/* src/*/*/*/*",
"createNodeImageList": "node ./scripts/createNodeImageList.js",
"ai:serve": "node ./scripts/ai.js"
},
"devDependencies": {
"@babel/core": "^7.28.0",
"@babel/preset-env": "^7.28.0",
"@types/node": "^16.11.6",
"babel-loader": "^10.0.0",
"babel-plugin-component": "^1.1.1",
"buffer": "^6.0.3",
"builtin-modules": "3.3.0",
"css-loader": "^7.1.2",
"css-minimizer-webpack-plugin": "^7.0.2",
"file-loader": "^6.2.0",
"less": "^3.12.2",
"less-loader": "^7.1.0",
"markdown-it": "^13.0.1",
"markdown-it-checkbox": "^1.1.0",
"mini-css-extract-plugin": "^2.9.2",
"obsidian": "latest",
"sass": "^1.89.2",
"sass-loader": "^16.0.5",
"stream-browserify": "^3.0.0",
"string_decoder": "^1.3.0",
"terser-webpack-plugin": "^5.3.14",
"url-loader": "^4.1.1",
"util": "^0.12.5",
"vue-loader": "^15.9.8",
"webpack": "^5.98.0",
"webpack-cli": "^6.0.1"
},
"dependencies": {
"@toast-ui/editor": "^3.1.5",
"axios": "^1.7.9",
"dayjs": "^1.11.13",
"element-ui": "^2.15.1",
"i18next": "^25.2.1",
"katex": "^0.16.9",
"lz-string": "^1.5.0",
"monkey-around": "^3.0.0",
"simple-mind-map-plugin-themes": "^1.0.0",
"v-viewer": "^1.6.4",
"vue": "^2.6.14",
"vue-i18n": "^8.27.2",
"vue-template-compiler": "^2.6.14",
"vuex": "^3.6.2",
"xlsx": "^0.18.5"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "babel-eslint"
},
"rules": {}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}

5
plugin/shims-vue.d.ts vendored Normal file
View file

@ -0,0 +1,5 @@
declare module '*.vue' {
import Vue from 'vue';
export default Vue;
}

BIN
plugin/src/.DS_Store vendored Normal file

Binary file not shown.

BIN
plugin/src/assets/.DS_Store vendored Normal file

Binary file not shown.

BIN
plugin/src/assets/icon-font/.DS_Store vendored Normal file

Binary file not shown.

View file

@ -0,0 +1,551 @@
@font-face {
font-family: "iconfont"; /* Project id 2479351 */
src: url('iconfont.woff2?t=1751275887986') format('woff2'),
url('iconfont.woff?t=1751275887986') format('woff'),
url('iconfont.ttf?t=1751275887986') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.iconarrow-left:before {
content: "\e61b";
}
.iconarrow-up:before {
content: "\e61c";
}
.icona-rongqi21:before {
content: "\e62b";
}
.icongeshishua:before {
content: "\e67b";
}
.iconcaozuo_geshishua:before {
content: "\e724";
}
.icontupian:before {
content: "\e8ba";
}
.iconwaikuang1:before {
content: "\e6db";
}
.iconwaikuang2:before {
content: "\e61f";
}
.iconqingchuyangshi:before {
content: "\e64a";
}
.iconchaolianjie1:before {
content: "\e6e2";
}
.icontag:before {
content: "\e62a";
}
.iconbeizhu:before {
content: "\e64b";
}
.icontaiyang:before {
content: "\e62e";
}
.iconjichuyangshi:before {
content: "\e61a";
}
.icongaiyao:before {
content: "\e653";
}
.iconMermaid:before {
content: "\e69a";
}
.iconzuoyouduiqi:before {
content: "\ec87";
}
.iconxise:before {
content: "\e680";
}
.iconshubiaoyidong:before {
content: "\e659";
}
.iconvip:before {
content: "\e65e";
}
.iconlianjie:before {
content: "\e619";
}
.iconjibiji:before {
content: "\e618";
}
.iconhuiyuan-:before {
content: "\e615";
}
.iconAIshengcheng:before {
content: "\e6b5";
}
.iconprinting:before {
content: "\ea28";
}
.iconwenjianjia:before {
content: "\e614";
}
.iconcontentleft:before {
content: "\e8c9";
}
.iconjuzhongduiqi:before {
content: "\ec80";
}
.iconfile-excel:before {
content: "\e7b7";
}
.iconfreemind:before {
content: "\e97d";
}
.iconwaikuang:before {
content: "\e640";
}
.iconhighlight:before {
content: "\e6b8";
}
.iconyanshibofang:before {
content: "\e648";
}
.iconfujian:before {
content: "\e88a";
}
.icongeshihua:before {
content: "\e7a3";
}
.iconyuanma:before {
content: "\e658";
}
.icongundongtiao:before {
content: "\e670";
}
.iconxietongwendang:before {
content: "\e60d";
}
.iconTXT:before {
content: "\e6e1";
}
.iconwenjian1:before {
content: "\e69f";
}
.icondodeparent:before {
content: "\e70f";
}
.icongongshi:before {
content: "\e617";
}
.icontouming:before {
content: "\e60c";
}
.iconlieri:before {
content: "\e60b";
}
.iconmoon_line:before {
content: "\e745";
}
.iconsousuo:before {
content: "\e693";
}
.iconjiantouyou:before {
content: "\e62d";
}
.iconbianji1:before {
content: "\e60a";
}
.icondaohang1:before {
content: "\e632";
}
.iconyanjing:before {
content: "\e8bf";
}
.iconwangzhan:before {
content: "\e628";
}
.iconcsdn:before {
content: "\e608";
}
.iconshejiaotubiao-10:before {
content: "\e644";
}
.iconstar:before {
content: "\e7df";
}
.iconfork:before {
content: "\e641";
}
.iconxiazai:before {
content: "\e613";
}
.iconteamwork:before {
content: "\e870";
}
.iconshuiyin:before {
content: "\e67a";
}
.iconxmind:before {
content: "\ea57";
}
.iconmouseR:before {
content: "\e6bd";
}
.iconmouseL:before {
content: "\e6c0";
}
.iconwenjian:before {
content: "\e607";
}
.iconpdf:before {
content: "\e740";
}
.iconPNG:before {
content: "\ec18";
}
.iconSVG:before {
content: "\e621";
}
.iconmarkdown:before {
content: "\ec04";
}
.iconjson:before {
content: "\ea42";
}
.iconlianjiexian:before {
content: "\e75b";
}
.iconbangzhu:before {
content: "\e620";
}
.iconshezhi:before {
content: "\e8b7";
}
.iconwushuju:before {
content: "\e643";
}
.iconzuijinliulan:before {
content: "\e62f";
}
.icon3zuidahua-3:before {
content: "\e692";
}
.iconzuixiaohua:before {
content: "\e650";
}
.iconzuidahua:before {
content: "\e651";
}
.iconguanbi:before {
content: "\e652";
}
.icondiannao:before {
content: "\eac0";
}
.iconzhuye:before {
content: "\e65c";
}
.iconbendi1x:before {
content: "\e606";
}
.iconbeijingyanse:before {
content: "\e6f8";
}
.iconqingchu:before {
content: "\e605";
}
.iconcase:before {
content: "\e6c6";
}
.iconxingzhuang-wenzi:before {
content: "\eb99";
}
.iconzitijiacu:before {
content: "\ec83";
}
.iconzitixiahuaxian:before {
content: "\ec85";
}
.iconzitixieti:before {
content: "\ec86";
}
.iconshanchuxian:before {
content: "\e612";
}
.iconzitiyanse:before {
content: "\e854";
}
.icongithub:before {
content: "\e64f";
}
.iconchoose1:before {
content: "\e6c5";
}
.iconzhuti:before {
content: "\e7aa";
}
.icondaochu1:before {
content: "\e63e";
}
.iconlingcunwei:before {
content: "\e657";
}
.iconexport:before {
content: "\e642";
}
.icondakai:before {
content: "\ebdf";
}
.iconxinjian:before {
content: "\e64e";
}
.iconjianqie:before {
content: "\e601";
}
.iconzhengli:before {
content: "\e83b";
}
.iconfuzhi:before {
content: "\e604";
}
.iconniantie:before {
content: "\e63f";
}
.iconshangyi:before {
content: "\e6be";
}
.iconxiayi:before {
content: "\e6bf";
}
.icongaikuozonglan:before {
content: "\e609";
}
.iconquanxuan:before {
content: "\f199";
}
.icondaoru:before {
content: "\e6a3";
}
.iconhoutui-shi:before {
content: "\e656";
}
.iconqianjin1:before {
content: "\e654";
}
.iconwithdraw:before {
content: "\e603";
}
.iconqianjin:before {
content: "\e600";
}
.iconhuifumoren:before {
content: "\e60e";
}
.iconhuanhang:before {
content: "\e61e";
}
.iconsuoxiao:before {
content: "\ec13";
}
.iconbianji:before {
content: "\e626";
}
.iconfangda:before {
content: "\e663";
}
.iconquanping1:before {
content: "\e664";
}
.icondingwei:before {
content: "\e616";
}
.icondaohang:before {
content: "\e611";
}
.iconjianpan:before {
content: "\e64d";
}
.iconquanping:before {
content: "\e602";
}
.icondaochu:before {
content: "\e63d";
}
.iconbiaoqian:before {
content: "\e63c";
}
.iconflow-Mark:before {
content: "\e65b";
}
.iconchaolianjie:before {
content: "\e6f4";
}
.iconjingzi:before {
content: "\e610";
}
.iconxiaolian:before {
content: "\e60f";
}
.iconimage:before {
content: "\e629";
}
.iconjiegou:before {
content: "\e61d";
}
.iconyangshi:before {
content: "\e631";
}
.iconfuhao-dagangshu:before {
content: "\e71f";
}
.icontianjiazijiedian:before {
content: "\e622";
}
.iconjiedian:before {
content: "\e655";
}
.iconshanchu:before {
content: "\e696";
}
.iconzhankai:before {
content: "\e64c";
}
.iconzhankai1:before {
content: "\e673";
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
plugin/src/assets/img/.DS_Store vendored Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1702344017086" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1621" width="128" height="128" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M776 328m-72 0a72 72 0 1 0 144 0 72 72 0 1 0-144 0Z" p-id="1622" fill="#bfbfbf"></path><path d="M999.904 116.608a32 32 0 0 0-21.952-10.912l-456.192-31.904a31.552 31.552 0 0 0-27.2 11.904l-92.192 114.848a32 32 0 0 0 0.672 40.896l146.144 169.952-147.456 194.656 36.48-173.376a32 32 0 0 0-11.136-31.424L235.616 245.504l79.616-125.696a32 32 0 0 0-29.28-49.024l-240.192 16.768a32 32 0 0 0-29.696 34.176l55.808 798.016a32.064 32.064 0 0 0 34.304 29.696l176.512-13.184c17.632-1.312 30.848-16.672 29.504-34.272s-16.576-31.04-34.304-29.536l-144.448 10.784-6.432-92.512 125.312-12.576a32 32 0 0 0 28.672-35.04 32.16 32.16 0 0 0-35.04-28.672l-123.392 12.416L82.144 149.184l145.152-10.144-60.96 96.224a32 32 0 0 0 6.848 41.952l198.4 161.344-58.752 279.296a30.912 30.912 0 0 0 0.736 14.752 31.68 31.68 0 0 0 1.408 11.04l51.52 154.56a31.968 31.968 0 0 0 27.456 21.76l523.104 47.552a32.064 32.064 0 0 0 34.848-29.632L1007.68 139.84a32.064 32.064 0 0 0-7.776-23.232z m-98.912 630.848l-412.576-39.648a31.52 31.52 0 0 0-34.912 28.768 32 32 0 0 0 28.8 34.912l414.24 39.808-6.272 89.536-469.728-42.72-39.584-118.72 234.816-310.016a31.936 31.936 0 0 0-1.248-40.192L468.896 219.84l65.088-81.056 407.584 28.48-40.576 580.192z" p-id="1623" fill="#bfbfbf"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.7 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M401.9 584.7h16v16h-16zM385.9 600.7h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16zM146.1 584.7h16v16h-16zM162.1 569h-16v-15.7h16V569z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16V506z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16V443z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16V380z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16V317z m0-31.4h-16v-15.7h16v15.7zM146.1 238.1h16v16h-16zM385.9 254.1h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16zM401.9 238.1h16v16h-16zM417.9 569h-16v-15.7h16V569z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16V506z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16V443z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16V380z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16V317z m0-31.4h-16v-15.7h16v15.7zM860.1 682.9h16v16h-16zM844.2 698.9h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-32 0h-16v-16h16v16zM604.3 682.9h16v16h-16zM620.3 667.1h-16v-15.7h16v15.7z m0-31.4h-16V620h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16V557h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16V494h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16V431h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16V368h16v15.7zM604.3 336.2h16v16h-16zM844.2 352.2h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-32 0h-16v-16h16v16zM860.1 336.2h16v16h-16zM876.1 667.1h-16v-15.7h16v15.7z m0-31.4h-16V620h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16V557h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16V494h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16V431h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16V368h16v15.7z" fill="#0A0408" /><path d="M246.9 107.8h531.6v531.6H246.9z" fill="#FFFFFF" /><path d="M786.5 647.4H238.9V99.8h547.6v547.6z m-531.6-16h515.6V115.8H254.9v515.6z" fill="#0A0408" /><path d="M305.1 166h415.1v415.1H305.1z" fill="#55B7A8" /><path d="M389.9 238.2h195.3v16H389.9zM384.6 338.8h256.2v16H384.6zM384.6 441.2h256.2v16H384.6z" fill="#0A0408" /><path d="M868.8 918H156.5l-50-415.4h812.3z" fill="#FFFFFF" /><path d="M875.9 926H149.4L97.5 494.6h830.4l-52 431.4z m-712.3-16h698.1l48.1-399.4H115.5L163.6 910z" fill="#0A0408" /><path d="M809.6 866.5H215.8L174.1 554h677.2z" fill="#F4BE6F" /><path d="M154.1 639.7h154.3v16H154.1zM154.1 717.9h258.3v16H154.1z" fill="#FFFFFF" /><path d="M842.7 318.8h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M901.6 377.7h-66.9v-66.9h66.9v66.9z m-50.9-16h34.9v-34.9h-34.9v34.9z" fill="#0A0408" /><path d="M128.6 220.8h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M187.5 279.7h-66.9v-66.9h66.9v66.9z m-50.9-16h34.9v-34.9h-34.9v34.9z" fill="#0A0408" /></svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M153.9 105.9h715.4v812.8H153.9z" fill="#55B7A8" /><path d="M877.3 926.8H145.9V97.9h731.4v828.9z m-715.4-16h699.4V113.9H161.9v796.9z" fill="#0A0408" /><path d="M221.3 182.9h580.5v658.8H221.3z" fill="#FFFFFF" /><path d="M793.8 833.8h16v16h-16zM777.7 849.8h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0H568v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0H439v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0H310v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16zM213.3 833.8h16v16h-16zM229.3 818.1h-16v-15.7h16v15.7z m0-31.4h-16V771h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16V724z m0-31.3h-16V677h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16V332h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16V285z m0-31.4h-16V238h16v15.6z m0-31.3h-16v-15.7h16v15.7zM213.3 174.9h16v16h-16zM777.7 190.9h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0H568v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0H439v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0H310v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16zM793.8 174.9h16v16h-16zM809.8 818.1h-16v-15.7h16v15.7z m0-31.4h-16V771h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16V724z m0-31.3h-16V677h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16V332h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16V285z m0-31.4h-16V238h16v15.6z m0-31.3h-16v-15.7h16v15.7z" fill="#0A0408" /><path d="M364.5 306.6m-44.8 0a44.8 44.8 0 1 0 89.6 0 44.8 44.8 0 1 0-89.6 0Z" fill="#DC444A" /><path d="M364.5 359.4c-29.1 0-52.8-23.7-52.8-52.8s23.7-52.8 52.8-52.8 52.8 23.7 52.8 52.8-23.7 52.8-52.8 52.8z m0-89.6c-20.3 0-36.8 16.5-36.8 36.8s16.5 36.8 36.8 36.8 36.8-16.5 36.8-36.8-16.5-36.8-36.8-36.8zM459.3 262.6h144.1v16H459.3zM459.3 332.2h244.1v16H459.3z" fill="#0A0408" /><path d="M364.5 516.3m-44.8 0a44.8 44.8 0 1 0 89.6 0 44.8 44.8 0 1 0-89.6 0Z" fill="#DC444A" /><path d="M364.5 569.1c-29.1 0-52.8-23.7-52.8-52.8s23.7-52.8 52.8-52.8 52.8 23.7 52.8 52.8-23.7 52.8-52.8 52.8z m0-89.6c-20.3 0-36.8 16.5-36.8 36.8 0 20.3 16.5 36.8 36.8 36.8s36.8-16.5 36.8-36.8c0-20.3-16.5-36.8-36.8-36.8zM459.3 472.3h144.1v16H459.3zM459.3 541.9h244.1v16H459.3z" fill="#0A0408" /><path d="M364.5 726m-44.8 0a44.8 44.8 0 1 0 89.6 0 44.8 44.8 0 1 0-89.6 0Z" fill="#DC444A" /><path d="M364.5 778.8c-29.1 0-52.8-23.7-52.8-52.8s23.7-52.8 52.8-52.8 52.8 23.7 52.8 52.8-23.7 52.8-52.8 52.8z m0-89.6c-20.3 0-36.8 16.5-36.8 36.8 0 20.3 16.5 36.8 36.8 36.8s36.8-16.5 36.8-36.8c0-20.3-16.5-36.8-36.8-36.8zM459.3 682h144.1v16H459.3zM459.3 751.6h244.1v16H459.3z" fill="#0A0408" /><path d="M359 72.4h305.2v75.9H359z" fill="#EBB866" /><path d="M672.2 156.2H351V64.4h321.2v91.8z m-305.2-16h289.2V80.4H367v59.8z" fill="#0A0408" /><path d="M808.3 807.9m-141.7 0a141.7 141.7 0 1 0 283.4 0 141.7 141.7 0 1 0-283.4 0Z" fill="#EBB866" /><path d="M808.3 957.6c-82.5 0-149.7-67.1-149.7-149.7s67.1-149.7 149.7-149.7S958 725.4 958 807.9s-67.2 149.7-149.7 149.7z m0-283.4c-73.7 0-133.7 60-133.7 133.7s60 133.7 133.7 133.7S942 881.6 942 807.9s-60-133.7-133.7-133.7z" fill="#0A0408" /><path d="M810.3 727.1l26 52.5 58 8.5-42 40.9 9.9 57.8-51.9-27.3-51.9 27.3 9.9-57.8-41.9-40.9 58-8.5z" fill="#FFFFFF" /><path d="M872.8 901.4l-62.5-32.9-62.5 32.9 11.9-69.6-50.6-49.3 69.9-10.2 31.3-63.3 31.3 63.3 69.9 10.2-50.6 49.3 11.9 69.6z m-62.5-51l41.3 21.7-7.9-45.9 33.4-32.5L831 787l-20.6-41.8-20.7 41.8-46.1 6.7 33.4 32.5-7.9 45.9 41.2-21.7z" fill="#0A0408" /></svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M74 183.7h216V918H74z" fill="#55B7A8" /><path d="M298 926H66V175.7h232V926zM82 910h200V191.7H82V910z" fill="#0A0408" /><path d="M125.6 246.6h116.8v229.2H125.6z" fill="#FFFFFF" /><path d="M250.4 483.8H117.6V238.6h132.8v245.2z m-116.8-16h100.8V254.6H133.6v213.2z" fill="#0A0408" /><path d="M178.8 783.9m-55.2 0a55.2 55.2 0 1 0 110.4 0 55.2 55.2 0 1 0-110.4 0Z" fill="#FFFFFF" /><path d="M178.8 847.1c-34.8 0-63.2-28.3-63.2-63.2s28.3-63.2 63.2-63.2c34.8 0 63.2 28.3 63.2 63.2s-28.4 63.2-63.2 63.2z m0-110.4c-26 0-47.2 21.2-47.2 47.2s21.2 47.2 47.2 47.2 47.2-21.2 47.2-47.2-21.2-47.2-47.2-47.2z" fill="#0A0408" /><path d="M519.4 224.2L728 168.3l190.1 709.3-208.6 55.9" fill="#FFFFFF" /><path d="M517.346 216.397l7.727-2.07 4.14 15.454-7.727 2.07zM544.1 225.8l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-7.9l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-8l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-8l-4.1-15.5 14.9-4 4.1 15.5-14.9 4zM663 194l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-8l-4.1-15.5 14.9-4 4.1 15.5-14.9 4zM722.4 178.1l-4.2-15.5 15.5-4.1 4.1 15.4zM904.2 856.5l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.9l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.2-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.2-30.9l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.8l-4.1-15.4L866 652l4.1 15.4-15.5 4.1z m-8.3-30.9l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.2-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.9l-4.1-15.4 15.5-4.1L837 544l-15.5 4.1z m-8.2-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.9l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.2-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.9l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.2-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.9l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.2-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.9l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1zM908.303 871.94l15.454-4.142 4.143 15.455-15.455 4.142zM734.2 935.1l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-7.9l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-8l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-7.9l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-8l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-8l-4.1-15.5 14.9-4 4.1 15.5-14.9 4zM707.443 925.66l7.727-2.07 4.141 15.454-7.727 2.07z" fill="#0A0408" /><path d="M583.619 272.12l112.817-30.229 59.317 221.385-112.817 30.228z" fill="#FFFFFF" /><path d="M637.3 503.3l-63.5-236.8L702.1 232l63.5 236.8-128.3 34.5z m-43.9-225.6l55.2 205.9 97.4-26.1-55.2-205.9-97.4 26.1z" fill="#0A0408" /><path d="M722.664239 791.097256a55.2 55.2 0 1 0 106.63871-28.571762 55.2 55.2 0 1 0-106.63871 28.571762Z" fill="#FFFFFF" /><path d="M776 840c-27.9 0-53.5-18.6-61-46.8-9-33.7 11-68.4 44.7-77.4s68.4 11 77.4 44.7c9 33.6-11 68.4-44.7 77.4-5.5 1.4-11 2.1-16.4 2.1z m0-110.4c-4 0-8.1 0.5-12.2 1.6-25.1 6.7-40.1 32.7-33.4 57.8 6.7 25.1 32.7 40.1 57.8 33.4 25.1-6.7 40.1-32.7 33.4-57.8-5.7-21-24.8-35-45.6-35z" fill="#0A0408" /><path d="M888.182 860.34l47.04-12.603 12.603 47.04-47.04 12.603z" fill="#DC444A" /><path d="M895.2 917.2l-16.8-62.5 62.5-16.8 16.8 62.5-62.5 16.8zM898 866l8.5 31.6 31.6-8.5-8.5-31.6L898 866z" fill="#0A0408" /><path d="M698.202 151.04l47.04-12.604 12.603 47.04-47.04 12.603z" fill="#DC444A" /><path d="M705.1 207.9l-16.8-62.5 62.5-16.8 16.8 62.5-62.5 16.8z m2.9-51.2l8.5 31.6 31.6-8.5-8.5-31.6-31.6 8.5z" fill="#0A0408" /><path d="M291.4 183.7h216V918h-216z" fill="#EBB866" /><path d="M515.4 926h-232V175.7h232V926z m-216-16h200V191.7h-200V910z" fill="#0A0408" /><path d="M343 246.6h116.8v229.2H343z" fill="#FFFFFF" /><path d="M467.8 483.8H335V238.6h132.8v245.2z m-116.8-16h100.8V254.6H351v213.2z" fill="#0A0408" /><path d="M396.2 783.9m-55.2 0a55.2 55.2 0 1 0 110.4 0 55.2 55.2 0 1 0-110.4 0Z" fill="#FFFFFF" /><path d="M396.2 847.1c-34.8 0-63.2-28.3-63.2-63.2s28.3-63.2 63.2-63.2c34.8 0 63.2 28.3 63.2 63.2s-28.4 63.2-63.2 63.2z m0-110.4c-26 0-47.2 21.2-47.2 47.2s21.2 47.2 47.2 47.2 47.2-21.2 47.2-47.2-21.2-47.2-47.2-47.2z" fill="#0A0408" /><path d="M712.5 941.5L518.4 217.2" fill="#FFFFFF" /><path d="M510.727 219.228l15.454-4.141 194.074 724.328-15.454 4.141z" fill="#0A0408" /></svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M96.4 364.2h830.3v529.5H96.4z" fill="#FFFFFF" /><path d="M926.7 901.7h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-22.3-9.7h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 860h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 828h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 796h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 764h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 732h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 700h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 668h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 636h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 604h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 572h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 540h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 508h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 476h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 444h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 412h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 380h-16v-23.8h8.2v8h7.8V380z m822.3-7.8h-14.1v-16h22.1v9.9h-8v6.1z m-30.1 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z" fill="#0A0408" /><path d="M172.6 438.3h677.8v381.4H172.6z" fill="#F4BE6F" /><path d="M96.4 258.8h830.3v105.9H96.4z" fill="#55B7A8" /><path d="M934.7 372.7H88.4V250.8h846.3v121.9z m-830.3-16h814.3v-89.9H104.4v89.9z" fill="#0A0408" /><path d="M457.3 107.2h108.5v203.7H457.3z" fill="#EBB866" /><path d="M573.8 318.9H449.3V99.2h124.5v219.7z m-108.5-16h92.5V115.2h-92.5v187.7z" fill="#0A0408" /><path d="M308.7 560.2m-65.9 0a65.9 65.9 0 1 0 131.8 0 65.9 65.9 0 1 0-131.8 0Z" fill="#FFFFFF" /><path d="M308.7 634.1c-40.8 0-73.9-33.2-73.9-73.9s33.2-73.9 73.9-73.9 73.9 33.2 73.9 73.9-33.1 73.9-73.9 73.9z m0-131.9c-32 0-57.9 26-57.9 57.9s26 57.9 57.9 57.9 57.9-26 57.9-57.9-25.9-57.9-57.9-57.9z" fill="#0A0408" /><path d="M418.7 767.9c0-60.7-49.2-109.9-109.9-109.9s-109.9 49.2-109.9 109.9h219.8z" fill="#FFFFFF" /><path d="M426.7 775.9H190.8v-8c0-65 52.9-117.9 117.9-117.9s117.9 52.9 117.9 117.9v8z m-219.6-16h203.3c-4.1-52.5-48.1-93.9-101.6-93.9s-97.6 41.4-101.7 93.9zM457.3 662.8h313.9v16H457.3zM457.3 751.2h261.8v16H457.3z" fill="#0A0408" /><path d="M457.3 512.7h313.9v65.9H457.3z" fill="#FFFFFF" /><path d="M779.2 586.7H449.3v-81.9h329.9v81.9z m-313.9-16h297.9v-49.9H465.3v49.9z" fill="#0A0408" /><path d="M512 258.6m-20.3 0a20.3 20.3 0 1 0 40.6 0 20.3 20.3 0 1 0-40.6 0Z" fill="#FFFFFF" /><path d="M512 287c-15.6 0-28.3-12.7-28.3-28.3s12.7-28.3 28.3-28.3 28.3 12.7 28.3 28.3S527.6 287 512 287z m0-40.7c-6.8 0-12.3 5.5-12.3 12.3S505.2 271 512 271s12.3-5.5 12.3-12.3-5.5-12.4-12.3-12.4z" fill="#0A0408" /><path d="M71.5 868.8h49.8v49.8H71.5z" fill="#DC504F" /><path d="M129.2 926.6H63.5v-65.8h65.8v65.8z m-49.7-16h33.8v-33.8H79.5v33.8z" fill="#0A0408" /><path d="M899.4 868.8h49.8v49.8h-49.8z" fill="#DC504F" /><path d="M957.1 926.6h-65.8v-65.8h65.8v65.8z m-49.7-16h33.8v-33.8h-33.8v33.8z" fill="#0A0408" /></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M886.6 657.2h-16.8v-7.6l-0.7-7.6 0.7-0.1v-0.7h7.7l7.6-0.7zM853.8 657.2h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32 0h-16v-16h16v16zM436.8 657.2h-18.2l4.3-17.7 6.9 1.7h7v1.8l1.7 0.4-1.7 6.8zM442.3 627.7l-15.5-3.8 3.9-15.7 15.5 3.8-3.9 15.7z m7.8-31.4l-15.5-3.8 3.9-15.7 15.5 3.8-3.9 15.7z m7.7-31.4l-15.5-3.8 3.9-15.7 15.5 3.8-3.9 15.7z m7.7-31.4l-15.5-3.8 3.9-15.7 15.5 3.8-3.9 15.7z m7.8-31.4l-15.5-3.8 3.9-15.7 15.5 3.8-3.9 15.7z m7.7-31.4l-15.5-3.8 3.9-15.7 15.5 3.8-3.9 15.7z m7.7-31.4l-15.5-3.8 3.9-15.7 15.5 3.8-3.9 15.7z m7.7-31.5l-15.5-3.8 3.9-15.7 15.5 3.8-3.9 15.7zM504.2 376.4l-15.6-3.8 3.4-13.8h14.3v16h-1.7zM923.3 374.8h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16zM950.2 377.7l-5-2.9h-5.8v-3.4l-3-1.8 3-5v-5.8h21.9zM867.8 626.8l-1.4-15.2 15.9-1.4 1.4 15.2-15.9 1.4z m-2.8-30.3l-1.4-15.2 15.9-1.4 1.4 15.2-15.9 1.4z m-2.8-30.3l-1.4-15.2 15.9-1.4 1.4 15.2-15.9 1.4z m-2.7-30.4l-1.4-15.2 15.9-1.4 1.4 15.2-15.9 1.4z m14-26.6l-13.8-8.1 7.7-13.2 13.8 8.1-7.7 13.2z m15.4-26.3l-13.8-8.1 7.7-13.2 13.8 8.1-7.7 13.2z m15.3-26.3l-13.8-8.1 7.7-13.2 13.8 8.1-7.7 13.2z m15.3-26.3l-13.8-8.1 7.7-13.2 13.8 8.1-7.7 13.2z m15.4-26.3l-13.8-8.1 7.7-13.2 13.8 8.1-7.7 13.2z" fill="#0A0408" /><path d="M795.3 649.2h-413l69.5-282.4h413.1L778.5 508z" fill="#EBB866" /><path d="M804.3 657.2H372.1l73.5-298.5h433.6l-92.4 151 17.5 147.5z m-411.8-16h393.8l-16.1-135 80.4-131.4H458.1l-65.6 266.4z" fill="#0A0408" /><path d="M238.4 855.7h-66.1l202.5-750.5H441z" fill="#55B7A8" /><path d="M244.5 863.7h-82.7L368.7 97.2h82.7L244.5 863.7z m-61.8-16h49.6l198.2-734.5H381L182.7 847.7z" fill="#0A0408" /><path d="M693.7 508h-453l69.5-282.5h453z" fill="#EBB866" /><path d="M700 516H230.5L304 217.5h469.5L700 516z m-449.1-16h436.6L753 233.5H316.5L250.9 500z" fill="#0A0408" /><path d="M115.6 850.1h189.8v68.8H115.6z" fill="#68A4D9" /><path d="M313.4 926.9H107.6v-84.8h205.8v84.8z m-189.8-16h173.8v-52.8H123.6v52.8z" fill="#0A0408" /><path d="M65.6 910.9h289.8v16H65.6zM278.6 358.8h232.7v16H278.6z" fill="#0A0408" /></svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M548.1 455.7h-72l-36 39.8 36 39.9h72l36-39.9z" fill="#DC444A" /><path d="M551.7 543.4h-79.1l-43.2-47.9 43.2-47.9h79.1l43.2 47.9-43.2 47.9z m-72-16h64.9l28.8-31.9-28.8-31.9h-64.9l-28.8 31.9 28.8 31.9z" fill="#0A0408" /><path d="M512.1 899.4l102.5-110.5-64.4-253.6h-76.1l-64.5 253.6z" fill="#FFFFFF" /><path d="M512.1 911.2l-111.3-120 67.1-263.8h88.5l67.1 263.8-111.4 120z m-93.7-124.6l93.7 101 93.7-101-61.9-243.4h-63.6l-61.9 243.4z" fill="#0A0408" /><path d="M512.1 843.5l72.4-78L539 586.6h-53.7l-45.5 178.9z" fill="#DC444A" /><path d="M512.1 240.3m-167.3 0a167.3 167.3 0 1 0 334.6 0 167.3 167.3 0 1 0-334.6 0Z" fill="#EBB866" /><path d="M512.1 415.5c-96.6 0-175.3-78.6-175.3-175.3S415.5 65 512.1 65c96.6 0 175.3 78.6 175.3 175.3s-78.6 175.2-175.3 175.2z m0-334.5c-87.8 0-159.3 71.4-159.3 159.3s71.4 159.3 159.3 159.3c87.8 0 159.3-71.4 159.3-159.3S599.9 81 512.1 81z" fill="#0A0408" /><path d="M880.3 950H143.9V645.6c0-61.2 116.2-144.2 177.4-144.2L512 774.7l190.7-273.3c61.2 0 177.4 82.9 177.4 144.2V950z" fill="#FFFFFF" /><path d="M888.3 958H135.9V645.6c0-43.4 48.2-85.4 68.9-101.4 39.9-30.9 85.7-50.8 116.6-50.8h4.2l186.6 267.3 186.6-267.3h4.2c30.9 0 76.7 19.9 116.6 50.8 20.7 16 68.9 57.9 68.9 101.4V958z m-736.4-16h720.4V645.6c0-25.2-23.4-58.4-62.6-88.7-35.5-27.4-75.2-45.6-102.7-47.3L512.1 788.8 317.3 509.6c-27.5 1.7-67.2 19.9-102.7 47.3-39.2 30.3-62.6 63.5-62.6 88.7V942z" fill="#0A0408" /><path d="M441.2 896.3H209.6V704.8c0-38.5 31.2-90.7 69.8-90.7h45.3l116.6 172v110.2zM574.6 896.3h231.7V704.8c0-38.5-31.2-90.7-69.8-90.7h-45.3L574.6 786v110.3z" fill="#55B7A8" /><path d="M520.1 930.4h-16v-15.2h16v15.2z m0-31.2h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32h-16v-16h16v16z" fill="#0A0408" /></svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M841.7 915.2L518.5 797.3 183.1 915.2V107.1h658.6z" fill="#FFFFFF" /><path d="M849.7 926.7L518.4 805.8 175.1 926.5V99.1h674.5v827.6zM191.1 115.1v788.8l327.4-115.1 315.1 115V115.1H191.1z" fill="#0A0408" /><path d="M801.6 868.3l-18.2-6.6 2.2-6.2v-6.6h2.5l0.8-2.3 6.2 2.3h6.5zM256.2 856.6l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m512.4-0.3l-14.8-5.4 5.5-15 14.8 5.4-5.5 15z m-482.8-10.2l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m453.3-0.6l-14.8-5.4 5.5-15 14.8 5.4-5.5 15z m-423.6-9.8l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m394.1-1l-14.8-5.4 5.5-15 14.8 5.4-5.5 15z m-364.5-9.4l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m334.9-1.4l-14.8-5.4 5.5-15 14.8 5.4-5.5 15z m-305.2-9.1l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m275.7-1.6l-14.8-5.4 5.5-15 14.8 5.4-5.5 15z m-246.1-8.8l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m216.6-2l-14.8-5.4 5.5-15 14.8 5.4-5.5 15zM434.1 794l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m157.4-2.4l-14.8-5.4 5.5-15 14.8 5.4-5.5 15z m-127.8-8l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m98.2-2.8l-14.8-5.4 5.5-15 14.8 5.4-5.5 15z m-68.5-7.7l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m39-3l-14.8-5.4 5.5-15 14.8 5.4-5.5 15zM223.2 868.2v-19.3h6.6l6.2-2.2 0.8 2.2h2.4v6.6l2.2 6.3zM239.2 833.2h-16v-15.7h16v15.7z m0-31.4h-16V786h16v15.8z m0-31.5h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16V629h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16V519z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16V362z m0-31.5h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16V252h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7zM223.2 157.5h16v16h-16zM770 173.5h-15.6v-16H770v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0H692v-16h15.6v16z m-31.3 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0H567v-16h15.6v16z m-31.3 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16H489v16z m-31.3 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.3 0h-15.6v-16h15.6v16z m-31.2 0H286v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16zM785.6 157.5h16v16h-16zM801.6 833.2h-16v-15.7h16v15.7z m0-31.4h-16V786h16v15.8z m0-31.5h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16V629h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16V519z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16V362z m0-31.5h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16V252h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z" fill="#0A0408" /><path d="M752.2 791.2l-235.4-85.9-244.2 85.9V196.6h479.6z" fill="#55B7A8" /><path d="M512.4 305.7l42.9 86.8 95.8 13.9-69.4 67.6 16.4 95.5-85.7-45.1-85.7 45.1 16.4-95.5-69.4-67.6 95.8-13.9z" fill="#EBB866" /><path d="M608.7 584.1l-96.3-50.6-96.3 50.6 18.4-107.3-77.9-76 107.7-15.7 48.2-97.6 48.2 97.6 107.7 15.7-77.9 76 18.2 107.3z m-96.3-68.7l75.1 39.5-14.3-83.6 60.7-59.2-83.9-12.2-37.5-76.1-37.5 76.1-84.1 12.1 60.7 59.2-14.3 83.6 75.1-39.4z" fill="#0A0408" /><path d="M205.7 140h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M264.6 198.9h-66.9V132h66.9v66.9z m-50.9-16h34.9V148h-34.9v34.9z" fill="#0A0408" /><path d="M768.2 140h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M827.1 198.9h-66.9V132h66.9v66.9z m-50.9-16h34.9V148h-34.9v34.9z" fill="#0A0408" /></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M858.5 933.3h-24v-16h16v3.9h8v12.1z m-40 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0H165v-18.5h16v10.5h-2.5v8z m680-28.1h-16v-16h16v16zM181 898.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 866.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 834.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 802.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 770.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 738.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 706.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 674.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 642.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 610.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 578.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 546.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 514.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 482.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 450.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 418.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 386.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 354.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 322.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 290.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 258.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 226.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 194.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 162.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 130.8h-16v-16h16v16z m677.5-25.6h-16v-8.4h0.4v-8h15.6v16.4z m-31.6-0.5h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0H173v-5.9h-8V88.7h21.9v16z" fill="#0A0408" /><path d="M261.7 193.2h500.2v228.9H261.7z" fill="#EBB866" /><path d="M769.8 430.2H253.7v-245h516.2v245z m-500.1-16h484.2v-213H269.7v213z" fill="#0A0408" /><path d="M261.7 496.3h112.4v129.4H261.7z" fill="#55B7A8" /><path d="M382.1 633.7H253.7V488.3h128.4v145.4z m-112.4-16h96.4V504.3h-96.4v113.4z" fill="#0A0408" /><path d="M455.5 496.3h112.4v129.4H455.5z" fill="#55B7A8" /><path d="M576 633.7H447.5V488.3H576v145.4z m-112.5-16H560V504.3h-96.4v113.4z" fill="#0A0408" /><path d="M261.7 709.9h112.4v129.4H261.7z" fill="#55B7A8" /><path d="M382.1 847.3H253.7V701.9h128.4v145.4z m-112.4-16h96.4V717.9h-96.4v113.4z" fill="#0A0408" /><path d="M455.5 709.9h112.4v129.4H455.5z" fill="#55B7A8" /><path d="M576 847.3H447.5V701.9H576v145.4z m-112.5-16H560V717.9h-96.4v113.4z" fill="#0A0408" /><path d="M649.4 496.3h112.4v342.9H649.4z" fill="#55B7A8" /><path d="M769.8 847.3H641.4v-359h128.4v359z m-112.4-16h96.4v-327h-96.4v327zM261.7 256.3h78.5v16h-78.5zM261.7 333h139.7v16H261.7z" fill="#0A0408" /><path d="M147.3 71h51.4v51.4h-51.4z" fill="#DC444A" /><path d="M206.7 130.5h-67.4V63h67.4v67.5z m-51.4-16h35.4V79h-35.4v35.5z" fill="#0A0408" /><path d="M824.8 71h51.4v51.4h-51.4z" fill="#DC444A" /><path d="M884.2 130.5h-67.4V63h67.4v67.5z m-51.4-16h35.4V79h-35.4v35.5z" fill="#0A0408" /><path d="M147.3 899.6h51.4V951h-51.4z" fill="#DC444A" /><path d="M206.7 959h-67.4v-67.4h67.4V959z m-51.4-16h35.4v-35.4h-35.4V943z" fill="#0A0408" /><path d="M824.8 899.6h51.4V951h-51.4z" fill="#DC444A" /><path d="M884.2 959h-67.4v-67.4h67.4V959z m-51.4-16h35.4v-35.4h-35.4V943z" fill="#0A0408" /></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 10 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 10 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M71.2 737.7h180.9v180.9H71.2z" fill="#FFFFFF" /><path d="M260.1 926.6H63.2V729.7h196.9v196.9z m-180.9-16h164.9V745.7H79.2v164.9z" fill="#0A0408" /><path d="M422.1 737.7H603v180.9H422.1z" fill="#FFFFFF" /><path d="M611 926.6H414.1V729.7H611v196.9z m-180.9-16H595V745.7H430.1v164.9z" fill="#0A0408" /><path d="M771.9 737.7h180.9v180.9H771.9z" fill="#FFFFFF" /><path d="M960.8 926.6H763.9V729.7h196.9v196.9z m-180.9-16h164.9V745.7H779.9v164.9z" fill="#0A0408" /><path d="M504.5 397.1h16v333.5h-16zM153.6 732.6h16v8h-16zM169.6 716.2h-16v-16.3h16v16.3z m0-32.7h-16v-16.3h16v16.3z m0-32.7h-16v-16.3h16v16.3z m0-32.7h-16v-16.3h16v16.3z m0-32.6h-16v-16.3h16v16.3z m0-32.7h-16v-16.3h16v16.3zM153.6 504.1h16v16h-16z" fill="#0A0408" /><path d="M840 520.1h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16zM855.9 504.1h16v16h-16zM871.9 716.2h-16v-16.3h16v16.3z m0-32.7h-16v-16.3h16v16.3z m0-32.7h-16v-16.3h16v16.3z m0-32.7h-16v-16.3h16v16.3z m0-32.6h-16v-16.3h16v16.3z m0-32.7h-16v-16.3h16v16.3zM855.9 732.6h16v8h-16z" fill="#0A0408" /><path d="M655.6 216.7c0 79-143 184.8-143 184.8s-143-105.8-143-184.8 64-143 143-143 143 64 143 143z" fill="#EBB866" /><path d="M512.5 411.5l-4.8-3.5c-6-4.4-146.3-109.2-146.3-191.3 0-83.3 67.8-151 151-151 83.3 0 151 67.8 151 151 0 82.1-140.3 186.8-146.3 191.3l-4.6 3.5z m0-329.8c-74.5 0-135 60.6-135 135 0 30.2 23.9 70.4 69.2 116.4 27.4 27.8 55 50 65.8 58.3 10.8-8.4 38.6-30.6 66-58.5 45.2-45.9 69.1-86.2 69.1-116.3 0-74.3-60.6-134.9-135.1-134.9z" fill="#0A0408" /><path d="M116.7 783.2h89.9v89.9h-89.9z" fill="#55B7A8" /><path d="M467.6 783.2h89.9v89.9h-89.9zM819 783.2h89.9v89.9H819z" fill="#4EB3A6" /><path d="M836.7 486.6h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M895.6 545.5h-66.9v-66.9h66.9v66.9z m-50.9-16h34.9v-34.9h-34.9v34.9z" fill="#0A0408" /><path d="M130 486.6h50.9v50.9H130z" fill="#DC444A" /><path d="M188.9 545.5H122v-66.9h66.9v66.9z m-50.9-16h34.9v-34.9H138v34.9z" fill="#0A0408" /></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M135.3 198.6h752.6V744H135.3z" fill="#FFFFFF" /><path d="M879.9 736h16v16h-16zM864.2 752h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0H347v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16H300v16z m-31.3 0H253v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16H206v16z m-31.3 0H159v-16h15.7v16zM127.3 736h16v16h-16zM143.3 719.9h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32.1h-16v-16h16v16zM127.3 190.6h16v16h-16zM864.2 206.6h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0H347v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16H300v16z m-31.3 0H253v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16H206v16z m-31.3 0H159v-16h15.7v16zM879.9 190.6h16v16h-16zM895.9 719.9h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32.1h-16v-16h16v16z" fill="#0A0408" /><path d="M263 274.5h495.8V634H263z" fill="#F4BE6F" /><path d="M758.8 642H255V274.5h16V626h487.8zM503.6 764.6h16v137.2h-16z" fill="#0A0408" /><path d="M511.1 913.7m-35.8 0a35.8 35.8 0 1 0 71.6 0 35.8 35.8 0 1 0-71.6 0Z" fill="#55B7A8" /><path d="M511.1 957.5c-24.2 0-43.8-19.7-43.8-43.8s19.7-43.8 43.8-43.8c24.2 0 43.8 19.7 43.8 43.8s-19.6 43.8-43.8 43.8z m0-71.7c-15.4 0-27.8 12.5-27.8 27.8 0 15.4 12.5 27.8 27.8 27.8 15.4 0 27.8-12.5 27.8-27.8 0.1-15.3-12.4-27.8-27.8-27.8z" fill="#0A0408" /><path d="M268.7 639.7l-11.3-11.3 191.1-191.2L543 530l135.1-133.7 11.2 11.4-146.2 144.8-94.5-92.7z" fill="#0A0408" /><path d="M694.9 467.3h-16v-62h-62v-16h78z" fill="#0A0408" /><path d="M71.9 106.8h879.4v92.8H71.9z" fill="#55B7A8" /><path d="M959.3 207.6H63.9V98.8h895.4v108.8z m-879.4-16h863.4v-76.8H79.9v76.8z" fill="#0A0408" /><path d="M109.9 718.5h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M168.8 777.4h-66.9v-66.9h66.9v66.9z m-50.9-16h34.9v-34.9h-34.9v34.9z" fill="#0A0408" /><path d="M862.5 718.5h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M921.3 777.4h-66.9v-66.9h66.9v66.9z m-50.8-16h34.9v-34.9h-34.9v34.9z" fill="#0A0408" /></svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M503.8 817.7h16v128.9h-16zM503.7 62.7h16v127.7h-16z" fill="#0A0408" /><path d="M511.7 214h379.2v600.7H132.6V214h379.1" fill="#FFFFFF" /><path d="M511.7 206h8v16h-8zM867.1 222h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.5 0H725v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16H646v16z m-31.5 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16zM882.9 206h16v16h-16zM898.9 790.9h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.7h-16V459h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16V380z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16V301h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8zM882.9 806.7h16v16h-16zM867.1 822.7h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.5 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16H646v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0H567v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.5 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.5 0h-15.8v-16H267v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0H188v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16zM124.6 806.7h16v16h-16zM140.6 790.9h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.7h-16V459h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16V380z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16V301h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8zM124.6 206h16v16h-16zM488 222h-15.8v-16H488v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0H409v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.5 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.5 0H188v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16zM503.7 206h8v16h-8zM333.7 957.6l-7.6-14.1 185.7-100.9 182 101-7.8 14-174.3-96.8z" fill="#0A0408" /><path d="M754.6 537.7c0 74.9-60.7 135.6-135.6 135.6s-135.6-60.7-135.6-135.6S544.1 402.1 619 402.1v135.6h135.6z" fill="#55B7A8" /><path d="M619 681.4c-79.2 0-143.6-64.4-143.6-143.6S539.8 394.1 619 394.1h8v135.6h135.6v8c0 79.2-64.4 143.7-143.6 143.7z m-8-271c-66.7 4.1-119.6 59.7-119.6 127.4 0 70.4 57.3 127.6 127.6 127.6 67.7 0 123.2-53 127.4-119.6H611V410.4z" fill="#0A0408" /><path d="M794.5 513.8H642.9V362.2h8c79.2 0 143.6 64.4 143.6 143.6v8z m-135.6-16h119.4c-4-64-55.4-115.4-119.4-119.4v119.4z" fill="#0A0408" /><path d="M750.4 477.8c0-39.5-32-71.5-71.5-71.5v71.5h71.5z" fill="#DC444A" /><path d="M229.1 583.2h16v90.2h-16zM288.7 411.5h16v261.9h-16zM348.3 512.5h16v160.9h-16zM407.9 613.5h16v59.9h-16z" fill="#0A0408" /><path d="M106.9 188.3h51.4v51.4h-51.4z" fill="#DC444A" /><path d="M166.3 247.7H98.9v-67.4h67.4v67.4z m-51.4-16h35.4v-35.4h-35.4v35.4z" fill="#0A0408" /><path d="M106.9 791h51.4v51.4h-51.4z" fill="#DC444A" /><path d="M166.3 850.4H98.9V783h67.4v67.4z m-51.4-16h35.4V799h-35.4v35.4z" fill="#0A0408" /><path d="M865.2 188.3h51.4v51.4h-51.4z" fill="#DC444A" /><path d="M924.6 247.7h-67.4v-67.4h67.4v67.4z m-51.4-16h35.4v-35.4h-35.4v35.4z" fill="#0A0408" /><path d="M865.2 791h51.4v51.4h-51.4z" fill="#DC444A" /><path d="M924.6 850.4h-67.4V783h67.4v67.4z m-51.4-16h35.4V799h-35.4v35.4z" fill="#0A0408" /></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M135.3 373h753.1v493H135.3z" fill="#FFFFFF" /><path d="M880.5 365h16v16h-16zM864.8 381h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0H755v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16H708v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0H504v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16H457v16z m-31.4 0H410v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0H159v-16h15.7v16zM127.3 365h16v16h-16zM143.3 841.5h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.8h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16V710z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16V562h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4zM127.3 858h16v16h-16zM864.8 874h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0H755v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16H708v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0H504v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16H457v16z m-31.4 0H410v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0H159v-16h15.7v16zM880.5 858h16v16h-16zM896.5 841.5h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.8h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16V710z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16V562h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z" fill="#0A0408" /><path d="M192.7 440.7h645.2v454.9H192.7z" fill="#EBB866" /><path d="M71.9 864.5H952v83.9H71.9z" fill="#FFFFFF" /><path d="M959.9 956.4h-896v-99.9H960v99.9z m-880-16H944v-67.9H79.9v67.9z" fill="#0A0408" /><path d="M314.5 334.1h84.4v319.7h-84.4z" fill="#55B7A8" /><path d="M406.9 661.8H306.5V326.1h100.4v335.7z m-84.4-16h68.4V342.1h-68.4v303.7z" fill="#0A0408" /><path d="M475.3 145.7h84.4v508.1h-84.4z" fill="#DC444A" /><path d="M567.6 661.8H467.3V137.7h100.4v524.1z m-84.3-16h68.4V153.7h-68.4v492.1z" fill="#0A0408" /><path d="M636 241.8h84.4v412H636z" fill="#68A4D9" /><path d="M728.4 661.8H628v-428h100.4v428z m-84.4-16h68.4v-396H644v396z" fill="#0A0408" /><path d="M314.5 308.7h84.4v110.8h-84.4z" fill="#FFFFFF" /><path d="M406.9 427.5H306.5V300.7h100.4v126.8z m-84.4-16h68.4v-94.8h-68.4v94.8z" fill="#0A0408" /><path d="M475.3 104h84.4v110.8h-84.4z" fill="#FFFFFF" /><path d="M567.6 222.8H467.3V96h100.4v126.8z m-84.3-16h68.4V112h-68.4v94.8z" fill="#0A0408" /><path d="M636 223.3h84.4v110.8H636z" fill="#FFFFFF" /><path d="M728.4 342.1H628V215.3h100.4v126.8z m-84.4-16h68.4v-94.8H644v94.8z" fill="#0A0408" /><path d="M314.5 742.2h8v16h-8zM696.8 758.2h-15.6v-16h15.6v16z m-31.2 0H650v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16H572v16z m-31.2 0h-15.6v-16h15.6v16z m-31.1 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16zM712.4 742.2h8v16h-8z" fill="#0A0408" /><path d="M109.9 347.6h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M168.8 406.5h-66.9v-66.9h66.9v66.9z m-50.9-16h34.9v-34.9h-34.9v34.9z" fill="#0A0408" /><path d="M863.7 346.9h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M922.6 405.7h-66.9v-66.9h66.9v66.9z m-50.9-16h34.9v-34.9h-34.9v34.9z" fill="#0A0408" /></svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="170.10px" viewBox="0 0 1204 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M0 0m84.453608 0l1035.23233 0q84.453608 0 84.453608 84.453608l0 669.801567q0 84.453608-84.453608 84.453609l-1035.23233 0q-84.453608 0-84.453608-84.453609l0-669.801567q0-84.453608 84.453608-84.453608Z" fill="#D6E0E8" /><path d="M47.716289 33.190268m84.453608 0l939.799752 0q84.453608 0 84.453609 84.453608l0 603.421031q0 84.453608-84.453609 84.453608l-939.799752 0q-84.453608 0-84.453608-84.453608l0-603.421031q0-84.453608 84.453608-84.453608Z" fill="#8DDFFF" /><path d="M712.112825 955.001402H492.026722l19.67769-116.292618h180.730722l19.677691 116.292618z" fill="#244F60" /><path d="M693.533031 838.708784h-33.274722l17.650804 116.292618h33.190268l-17.56635-116.292618z" fill="#19355E" opacity=".47" /><path d="M413.82268 955.001402h376.663093a68.998598 68.998598 0 0 1 68.998598 68.998598h-515.16701a68.998598 68.998598 0 0 1 69.505319-68.998598z" fill="#2E5A70" /><path d="M790.485773 955.001402h-41.466721a68.914144 68.914144 0 0 1 68.914144 68.914144h41.551175a68.914144 68.914144 0 0 0-68.998598-68.914144z" fill="#19355E" opacity=".47" /><path d="M602.069773 780.604701m-24.913814 0a24.913814 24.913814 0 1 0 49.827629 0 24.913814 24.913814 0 1 0-49.827629 0Z" fill="#FFFFFF" /><path d="M1133.53633 755.690887v-41.551176H0v41.551176a83.017897 83.017897 0 0 0 83.017897 83.017897h967.500536a83.017897 83.017897 0 0 0 83.017897-83.017897z" fill="#2E5A70" /><path d="M1167.48668 824.520577a78.457402 78.457402 0 0 1-14.103752 7.685279 78.457402 78.457402 0 0 0 14.103752-7.685279zM1203.717278 764.136247a77.866227 77.866227 0 0 1-3.378144 16.215093 77.866227 77.866227 0 0 0 3.378144-16.215093zM1121.037196 0h-70.518763a83.017897 83.017897 0 0 1 83.017897 83.017897v631.121814h70.603216V83.017897A83.102351 83.102351 0 0 0 1121.037196 0zM1173.905155 819.791175a84.453608 84.453608 0 0 0 20.184412-24.491546 84.453608 84.453608 0 0 1-20.184412 24.491546z" fill="#F0F5FF" opacity=".33" /><path d="M1133.53633 755.690887a83.017897 83.017897 0 0 1-83.017897 83.017897h70.518763a82.257814 82.257814 0 0 0 32.345732-6.502928 78.457402 78.457402 0 0 0 14.103752-7.685279 69.75868 69.75868 0 0 0 6.418475-4.729402 84.453608 84.453608 0 0 0 20.184412-24.491546 83.355711 83.355711 0 0 0 6.249567-14.948289 77.866227 77.866227 0 0 0 3.378144-16.215093c0-2.786969 0.422268-5.573938 0.422268-8.44536v-41.551176h-70.603216z" fill="#0459A5" /><path d="M1133.53633 755.690887a83.017897 83.017897 0 0 1-83.017897 83.017897h70.518763a82.257814 82.257814 0 0 0 32.345732-6.502928 78.457402 78.457402 0 0 0 14.103752-7.685279 69.75868 69.75868 0 0 0 6.418475-4.729402 84.453608 84.453608 0 0 0 20.184412-24.491546 83.355711 83.355711 0 0 0 6.249567-14.948289 77.866227 77.866227 0 0 0 3.378144-16.215093c0-2.786969 0.422268-5.573938 0.422268-8.44536v-41.551176h-70.603216z" fill="#153D4C" /><path d="M583.321072 383.166021c0 114.688-68.914144 213.498722-202.68866 213.498721-129.382928 0-197.114722-93.996866-197.114721-212.147464 0-119.924124 74.825897-212.06301 202.68866-212.06301 120.515299 0 197.114722 84.538062 197.114721 210.711753z m-307.833402 0c0 80.484289 35.386062 141.37534 108.438433 141.37534 79.301938 0 107.340536-66.380536 107.340536-139.855175 0-78.372948-31.923464-139.770722-108.776247-139.770722-74.488082 0-107.002722 57.597361-107.002722 137.828289zM731.368247 495.48932l-32.176824 95.179216H611.528577L751.637113 178.450474h111.901031l146.104743 412.218062h-93.743506l-33.781443-95.179216zM862.778062 422.268041c-29.305402-87.07167-47.969649-142.642144-57.935175-179.717278h-0.591176C793.863918 283.426309 773.510598 348.03332 750.032495 422.268041z" fill="#FF9831" /></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M287.403798 183.554432a124.492312 124.492312 0 0 0-95.870977 45.136335L530.02035 951.711884h14.905487l270.818014-739.676075a124.00246 124.00246 0 0 0-79.146039-28.481377z" fill="#FFAF3B" /><path d="M191.532821 228.690767A127.081528 127.081528 0 0 0 162.07174 310.216087v514.904121A125.961867 125.961867 0 0 0 287.403798 951.711884H316.025133V495.310053zM379.355961 629.949293v321.83257h150.664389L379.355961 629.949293z" fill="#FF761A" /><path d="M379.355961 183.554432h-63.050912v311.755621l63.050912 134.63924V183.554432z" fill="#FF9E1D" /><path d="M316.305049 495.310053v456.47181h63.050912V629.949293l-63.050912-134.63924z" fill="#FF5A08" /><path d="M815.743851 212.035809L662.910119 629.809335v321.902549H736.597812a125.961867 125.961867 0 0 0 125.262078-126.591676V310.216087a126.801613 126.801613 0 0 0-46.116039-98.180278zM544.925837 951.781863h54.93337v-150.034579l-54.93337 150.034579z" fill="#FFC73B" /><path d="M662.910119 183.554432h-63.050912v618.192852l63.050912-172.147885V183.554432z" fill="#FF9E1D" /><path d="M599.859207 801.747284v150.034579h63.050912V629.599399l-63.050912 172.147885z" fill="#FFB206" /><path d="M347.795515 5.668284h72.07818v177.886148h-72.07818z" fill="#2B3747" /><path d="M396.150877 5.668284h23.722818v177.886148h-23.722818z" fill="#1D2B3A" /><path d="M600.908889 5.668284h72.07818v177.886148h-72.07818z" fill="#2B3747" /><path d="M649.26425 5.668284h23.722819v177.886148h-23.722819z" fill="#1D2B3A" /><path d="M730.649612 183.554432H648.354526c72.498052 0 131.210278 53.813709 131.210278 120.153625v527.920181c0 66.339917-58.712226 120.153625-131.210278 120.153625h82.295086c72.498052 0 131.280257-53.813709 131.280257-120.153625V303.708057c-0.069979-66.339917-58.782205-120.153625-131.280257-120.153625z" fill="#EF8B06" /><path d="M389.782804 41.147543v4.618602a13.995763 13.995763 0 0 0 13.995763 13.995763h189.852525a13.995763 13.995763 0 0 0 13.995763-13.995763v-4.618602z" fill="#FF761A" /><path d="M607.486898 13.995763a13.995763 13.995763 0 0 0-13.995763-13.995763H403.63861a13.995763 13.995763 0 0 0-13.995763 13.995763v27.15178h217.844051z" fill="#FF5A08" /><path d="M292.792167 969.69644a54.30356 53.74373 90 1 0 107.48746 0 54.30356 53.74373 90 1 0-107.48746 0Z" fill="#2B3747" /><path d="M346.535897 915.392879a55.213285 55.213285 0 0 0-9.727056 0.909725 54.373539 54.373539 0 0 1 0 106.787671 55.213285 55.213285 0 0 0 9.727056 0.909725 54.30356 54.30356 0 0 0 0-108.607121z" fill="#1D2B3A" /><path d="M587.332999 969.69644a54.30356 53.74373 90 1 0 107.48746 0 54.30356 53.74373 90 1 0-107.48746 0Z" fill="#2B3747" /><path d="M641.076729 915.392879a55.073327 55.073327 0 0 0-9.657076 0.909725 54.373539 54.373539 0 0 1 0 106.787671 55.073327 55.073327 0 0 0 9.657076 0.909725 54.30356 54.30356 0 0 0 0-108.607121z" fill="#1D2B3A" /></svg>

After

Width:  |  Height:  |  Size: 3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M88.917218 106.064551m82.970966 0l597.529237 0q82.970966 0 82.970965 82.970966l0 751.924375q0 82.970966-82.970965 82.970966l-597.529237 0q-82.970966 0-82.970966-82.970966l0-751.924375q0-82.970966 82.970966-82.970966Z" fill="#005691" /><path d="M169.675625 187.44524m48.12316 0l505.708035 0q48.12316 0 48.12316 48.12316l0 658.927751q0 48.12316-48.12316 48.12316l-505.708035 0q-48.12316 0-48.12316-48.12316l0-658.927751q0-48.12316 48.12316-48.12316Z" fill="#E2E5E7" /><path d="M638.392438 73.360162H547.608373a73.360162 73.360162 0 0 0-146.720324 0H302.774882a29.454693 29.454693 0 0 0-29.316408 29.316408V235.084402a29.454693 29.454693 0 0 0 29.316408 29.316408h335.617556A29.38555 29.38555 0 0 0 667.639703 235.084402V102.67657a29.38555 29.38555 0 0 0-29.247265-29.316408z" fill="#FFB236" /><path d="M466.919109 1.175422A78.684132 78.684132 0 0 1 479.779608 0a73.360162 73.360162 0 0 1 73.360162 73.360162h-25.790141A73.360162 73.360162 0 0 0 466.919109 1.175422zM647.450101 235.084402V102.67657c0-16.110196 1.451992-29.316408-14.658204-29.316408h11.131938a29.454693 29.454693 0 0 1 29.316408 29.316408V235.084402a29.454693 29.454693 0 0 1-29.316408 29.316408h-11.131938c16.179338 0 14.658204-13.206212 14.658204-29.316408z" fill="#E28805" /><path d="M474.248211 73.360162m-25.790142 0a25.790142 25.790142 0 1 0 51.580283 0 25.790142 25.790142 0 1 0-51.580283 0Z" fill="#005691" /><path d="M492.570966 81.449831a25.651857 25.651857 0 0 1-31.252397 13.828494c0.82971 0.483997 1.590277 0.967995 2.489129 1.38285a25.790142 25.790142 0 1 0 20.742741-47.155166 20.742741 20.742741 0 0 0-2.696556-0.898852 25.651857 25.651857 0 0 1 10.717083 32.842674z" fill="#004870" /><path d="M348.408913 163.314517m20.258744 0l200.167454 0q20.258744 0 20.258745 20.258744l0 2.419987q0 20.258744-20.258745 20.258744l-200.167454 0q-20.258744 0-20.258744-20.258744l0-2.419987q0-20.258744 20.258744-20.258744Z" fill="#E2E5E7" /><path d="M259.699122 387.474409m21.019311 0l252.715733 0q21.019311 0 21.019311 21.019311l0 2.489129q0 21.019311-21.019311 21.019312l-252.715733 0q-21.019311 0-21.019311-21.019312l0-2.489129q0-21.019311 21.019311-21.019311Z" fill="#586A73" /><path d="M259.699122 485.864146m21.019311 0l252.715733 0q21.019311 0 21.019311 21.019311l0 2.489129q0 21.019311-21.019311 21.019311l-252.715733 0q-21.019311 0-21.019311-21.019311l0-2.489129q0-21.019311 21.019311-21.019311Z" fill="#586A73" /><path d="M259.699122 584.323025m21.019311 0l125.770156 0q21.019311 0 21.019311 21.019311l0 2.489129q0 21.019311-21.019311 21.019312l-125.770156 0q-21.019311 0-21.019311-21.019312l0-2.489129q0-21.019311 21.019311-21.019311Z" fill="#586A73" /><path d="M461.318569 895.533288l310.311411-124.456448v110.143957z" fill="#C6CBCB" opacity=".7" /><path d="M841.947873 509.303444l-308.098852 298.833761 27.034706 31.183254 320.61364-288.669818z" fill="#EB8923" /><path d="M533.849021 808.137205l-29.316408-21.503309 316.465091-324.001621 20.742742 46.671169z" fill="#ED9E43" /><path d="M560.883727 839.320459l12.653072 33.050101 361.545983-304.226873-53.585415-17.285618z" fill="#D27228" /><path d="M820.997704 462.632275l20.742742 46.671169 39.549493 41.485482 53.585415 17.285618-16.24848-46.394598-43.490615-44.596894z m-316.465091 324.001621s62.228224 25.375287 69.142471 85.736664c0 0-103.713707 36.023228-112.218231 23.162728s43.07576-108.899392 43.07576-108.899392z" fill="#F2B643" /><path d="M461.318569 895.533288c3.802836 5.669683 25.997569 1.866847 49.644294-4.21769l-37.267792-41.485483c-9.126806 20.950169-15.833626 40.448346-12.376502 45.703173z" fill="#EB8923" /><path d="M851.282107 509.303444l-7.398245-33.948954 14.934774-2.903984-37.820932-9.818231 20.742742 46.671169 39.549493 41.485482z" fill="#D89932" /><path d="M462.286563 896.639568l1.037137 0.55314-0.967994-0.55314z m44.320324-4.217691c31.183255-7.674814 66.791627-20.051317 66.791628-20.051317a91.890344 91.890344 0 0 0-10.647941-33.603241l-65.270493 37.613505 13.206212 14.934774z" fill="#D89932" opacity=".4" /><path d="M472.588791 898.298987H479.019041l2.903984-0.414855h0.622282l3.664551-0.553139 3.249696-0.622283H489.943552l3.526266-0.691424h0.622282l7.951384-1.797705h0.622282l3.871979-0.898852 4.217691-1.106279-13.344497-14.934774-35.124376 19.359892 0.967995 0.55314 1.451992 0.414854h7.052532z" fill="#D27228" /></svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M799.521962 974.880603H210.446693a70.282921 70.282921 0 0 1-70.139925-70.139924V182.320905a68.781455 68.781455 0 0 1 2.573943-18.446586A70.35442 70.35442 0 0 0 91.187372 231.440302v722.13378a70.35442 70.35442 0 0 0 70.139924 70.139924h589.146767a70.35442 70.35442 0 0 0 67.565983-51.693338 68.924452 68.924452 0 0 1-18.518084 2.859935z" fill="#FCB670" /><path d="M745.183182 310.946516c-59.701159 0-108.248569-51.049853-108.248568-113.753945V0H254.489704a74.286831 74.286831 0 0 0-72.14188 75.859796v781.119955a74.215333 74.215333 0 0 0 72.14188 75.788298h606.163385a74.215333 74.215333 0 0 0 72.141879-75.788298V310.946516z" fill="#F9B04E" /><path d="M673.041303 197.192571a74.215333 74.215333 0 0 0 72.141879 75.788298h187.611786L673.041303 0z" fill="#EDA43A" /><path d="M636.934614 0h-8.579808l8.579808 9.008798V0z" fill="#D86100" opacity=".25" /><path d="M700.496686 310.946516h44.686496a107.676581 107.676581 0 0 1-95.235861-59.844156 77.575758 77.575758 0 0 1-21.449518-53.909789V0h-35.749197v197.192571c-0.500489 62.704092 48.046921 113.753945 107.74808 113.753945zM888.108472 856.979751a74.215333 74.215333 0 0 1-72.14188 75.788298h44.686497a74.215333 74.215333 0 0 0 72.141879-75.788298V310.946516h-44.686496z" fill="#D86100" opacity=".25" /><path d="M622.205944 675.159335H488.646944a145.14174 145.14174 0 0 1-128.697109-212.35023L405.780306 493.338919a90.731462 90.731462 0 0 0 82.866638 127.33864h133.559V573.417121L731.097999 646.059489l-108.892055 72.57087v-43.471024z m-120.403295-235.9447v43.685519L392.910595 410.400782l108.892054-72.57087v46.974445h131.986035a145.14174 145.14174 0 0 1 128.69711 211.992738l-45.758973-30.458315A90.731462 90.731462 0 0 0 670.324364 446.864963a89.444491 89.444491 0 0 0-36.321185-7.57883z" fill="#FF6845" /></svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="191.76px" viewBox="0 0 1068 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M0.62344 217.658447v708.227702c0 53.927549 38.964992 98.113851 85.722983 98.113851h896.194825c47.225571 0 85.722983-44.186301 85.722983-98.113851V214.151598c-7.169559 2.18204-1067.640791 3.506849-1067.640791 3.506849z" fill="#BDEBFF" /><path d="M981.917808 0H85.722983C38.964992 0 0 44.186301 0 98.113851v122.817656h1067.640791V98.113851C1067.640791 44.186301 1028.675799 0 981.917808 0z" fill="#005691" /><path d="M61.486758 112.608828a20.807306 20.028006 0 1 0 41.614612 0 20.807306 20.028006 0 1 0-41.614612 0Z" fill="#FF441F" /><path d="M158.977169 112.608828a20.807306 20.028006 0 1 0 41.614612 0 20.807306 20.028006 0 1 0-41.614612 0Z" fill="#6FE513" /><path d="M256.46758 112.608828a20.807306 20.028006 0 1 0 41.614612 0 20.807306 20.028006 0 1 0-41.614612 0Z" fill="#FFF41F" /><path d="M0 220.931507h1067.640791v43.640791H0z" fill="#9FE6FF" /><path d="M271.741857 473.658447H126.324505V311.719939h145.417352z m-122.038356-23.378995h98.65936V335.098935H149.703501zM335.098935 377.103196h595.774733v31.171994H335.098935zM271.741857 711.344901H126.324505V549.328463h145.417352z m-122.038356-23.378995h98.65936V572.707458H149.703501zM335.098935 614.71172h595.774733v31.171994H335.098935zM271.741857 949.031355H126.324505V787.092846h145.417352z m-122.038356-23.378996h98.65936V810.471842H149.703501zM335.098935 852.398174h595.774733v31.171993H335.098935z" fill="#0D455E" /><path d="M181.888584 493.608524l-69.903196-113.621918 33.198174-20.417656 43.562861 70.838356L321.071537 293.016743l28.054795 27.041704-167.237748 173.550077zM181.888584 712.981431l-69.903196-113.621918 33.198174-20.417656 43.562861 70.838356L321.071537 512.38965l28.054795 27.041705-167.237748 173.550076z" fill="#FF441F" /></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M278.521074 32.22621h31.878195V485.133225h-31.878195z" fill="#C99071" /><path d="M310.329666 0h31.878195v485.133225h-31.878195z" fill="#F9CAA7" /><path d="M278.521074 32.22621L251.863108 0h113.870582l-23.525829 32.22621h-63.686787z" fill="#F9CAA7" /><path d="M134.860389 71.969549h31.878195v452.907014h-31.878195z" fill="#C99071" /><path d="M166.738584 39.812942h31.878195v485.133224h-31.878195z" fill="#F9CAA7" /><path d="M134.860389 72.039152l-26.657966-32.22621h113.940185l-23.525829 32.22621h-63.75639z" fill="#F9CAA7" /><path d="M521.85332 323.306145L150.312265 544.365416v479.634584h375.508429V325.95106l-3.967374-2.644915z" fill="#FF7352" /><path d="M873.766316 554.249048l-347.945622-228.297988v698.04894h347.945622V554.249048z" fill="#FF5736" /><path d="M734.281814 749.48559H317.289971l-34.801523-53.803154h486.594889l-34.801523 53.803154z" fill="#FFFFFF" opacity=".53" /><path d="M572.315528 546.244698H479.32586V456.665579h92.989668z m-86.029364-6.960304h79.069059V463.625884H486.286164z" fill="#FCFCFC" /><path d="M522.340542 460.145731h6.960304v82.688418h-6.960304z" fill="#FCFCFC" /><path d="M482.806012 497.940185h86.029364v6.960304H482.806012z" fill="#FCFCFC" /><path d="M317.289971 746.840674h86.516585v277.159326H317.289971z" fill="#52C1FF" /><path d="M403.806556 746.840674h330.475258v277.159326H403.806556z" fill="#45ABFF" /><path d="M29.898997 639.512779a27.841218 27.841218 0 0 1-14.964654-51.367048l492.232735-314.118542a27.841218 27.841218 0 0 1 30.41653 0.348015l472.047853 314.04894a27.841218 27.841218 0 0 1-30.834149 46.355628L521.85332 330.75367 44.863652 635.127787a27.841218 27.841218 0 0 1-14.964655 4.384992z" fill="#823500" /><path d="M317.289971 799.042958h86.516585v47.051659H317.289971z" fill="#A2DCFC" /><path d="M403.806556 799.042958h330.475258v47.051659H403.806556zM403.806556 895.234367h330.475258v47.051658H403.806556z" fill="#C2E6FF" /><path d="M317.289971 895.234367h86.516585v47.051658H317.289971zM317.289971 976.739532h86.516585v47.051659H317.289971z" fill="#A2DCFC" /><path d="M403.806556 976.739532h330.475258v47.051659H403.806556z" fill="#C2E6FF" /></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="180.12px" viewBox="0 0 1137 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M1120.237833 68.659474h0.900183a16.366978 16.366978 0 0 0 16.366979-16.366978V17.512667a16.366978 16.366978 0 0 0-16.366979-16.366979H17.594502a16.366978 16.366978 0 0 0-16.366979 16.366979v34.452489a16.366978 16.366978 0 0 0 16.366979 16.366979h2.045872a16.366978 16.366978 0 0 1 16.366978 16.366978v628.819308a16.366978 16.366978 0 0 1-16.366978 16.366978H16.366978a16.366978 16.366978 0 0 0-16.366978 16.366979v34.534324a16.366978 16.366978 0 0 0 16.366978 16.366978h501.647887a18.249181 18.249181 0 0 1 2.209542 0h96.647007a18.249181 18.249181 0 0 1 2.209542 0h501.156877a16.366978 16.366978 0 0 0 16.366978-16.366978v-34.043315a16.366978 16.366978 0 0 0-16.366978-16.366978 16.366978 16.366978 0 0 1-16.366979-16.366979V85.271957a16.366978 16.366978 0 0 1 16.366979-16.612483z" fill="#2CDB8F" /><path d="M534.709182 814.502677v115.223528a16.366978 16.366978 0 0 1-16.366978 16.366978h-46.482218a16.366978 16.366978 0 0 0-16.366979 16.366978v44.436347a16.366978 16.366978 0 0 0 16.366979 16.366978h193.375849a16.366978 16.366978 0 0 0 16.366978-16.366978v-44.436347a16.366978 16.366978 0 0 0-16.366978-16.366978h-46.154879a16.366978 16.366978 0 0 1-16.366979-16.366978V814.502677a16.366978 16.366978 0 0 1 14.402941-16.366978H520.224407a16.366978 16.366978 0 0 1 14.484775 16.366978z" fill="#1CD384" /><path d="M665.31767 945.438504h-46.236714a16.366978 16.366978 0 0 1-16.366979-16.366978v-115.387198a16.366978 16.366978 0 0 1 16.366979-16.366978h-25.123312a16.366978 16.366978 0 0 0-16.366978 16.366978v115.141693a16.366978 16.366978 0 0 0 16.366978 16.366978h46.154879a16.366978 16.366978 0 0 1 16.366978 16.366979v45.00919a16.366978 16.366978 0 0 1-16.366978 16.366978h25.205147a16.366978 16.366978 0 0 0 16.366978-16.366978v-44.436346a16.366978 16.366978 0 0 0-16.366978-16.694318z" fill="#059959" opacity=".31" /><path d="M1120.237833 67.75929h0.900183a16.366978 16.366978 0 0 0 16.366979-16.366978V16.366978a16.366978 16.366978 0 0 0-16.366979-16.366978h-58.757452a16.366978 16.366978 0 0 1 16.366979 16.366978v34.779829a16.366978 16.366978 0 0 1-16.366979 16.366979h-0.982018a16.366978 16.366978 0 0 0-16.366979 16.366978v628.737473a16.366978 16.366978 0 0 0 16.366979 16.366978 16.366978 16.366978 0 0 1 16.366978 16.366979v34.534324a16.366978 16.366978 0 0 1-16.366978 16.366978h58.757452a16.366978 16.366978 0 0 0 16.366978-16.366978v-33.96148a16.366978 16.366978 0 0 0-16.366978-16.366978 16.366978 16.366978 0 0 1-16.366979-16.366979V84.371773a16.366978 16.366978 0 0 1 16.448814-16.612483z" fill="#009E5A" opacity=".16" /><path d="M901.902342 526.771198l-176.763367-162.851435a25.205147 25.205147 0 0 0-35.680012 1.554863L552.631024 515.559818a25.205147 25.205147 0 0 1-33.797811 3.191561l-137.646287-103.930313a25.123312 25.123312 0 0 0-32.733957 2.291377l-75.45177 75.45177a25.205147 25.205147 0 0 1-35.598178 0l-23.732119-23.732118a25.123312 25.123312 0 0 1 0-35.680013l126.844082-127.089587a25.286982 25.286982 0 0 1 32.733957-2.291377l135.109406 101.966275a25.123312 25.123312 0 0 0 33.797811-3.109726l142.147207-156.059138a25.205147 25.205147 0 0 1 35.843682-1.554863l238.794214 220.054024a25.123312 25.123312 0 0 1 1.391193 35.598177l-22.7501 24.550468a25.123312 25.123312 0 0 1-35.680012 1.554863z" fill="#FFFFFF" /><path d="M216.944298 472.350995l123.570686-123.488852a25.123312 25.123312 0 0 1 32.733957-2.291377l135.109406 101.966275a25.205147 25.205147 0 0 0 33.797811-3.109725l142.147207-156.059139a25.123312 25.123312 0 0 1 35.843682-1.554863l235.929993 217.435307 4.255414-4.582754a25.123312 25.123312 0 0 0-1.391193-35.598177L720.147047 245.013666a25.205147 25.205147 0 0 0-35.680013 1.554863L542.156158 402.627667a25.123312 25.123312 0 0 1-33.797811 3.109726L373.494446 303.771118a25.286982 25.286982 0 0 0-32.733957 2.291377L213.425398 433.152082a25.123312 25.123312 0 0 0 0 35.680013z" fill="#EAEAEA" opacity=".8" /><path d="M119.397107 154.995285a8.183489 8.183489 0 0 1-8.183489-8.183489v-81.834892a8.183489 8.183489 0 0 1 8.183489-8.183489H188.220251A8.183489 8.183489 0 0 1 188.220251 73.651403h-60.55782v73.651402a8.183489 8.183489 0 0 1-8.265324 7.69248zM119.397107 188.220251a8.183489 8.183489 0 0 1-8.183489-8.183489v-8.183489a8.183489 8.183489 0 1 1 16.366978 0v7.446975a8.183489 8.183489 0 0 1-8.183489 8.920003z" fill="#DEFFF0" /></svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="182.86px" viewBox="0 0 1120 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M907.736266 602.111768l-7.87692-3.071998a211.731611 211.731611 0 0 1-234.574679 0l-7.87692 3.071998a344.615252 344.615252 0 0 0-212.676841 321.142031v70.183357a29.853527 29.853527 0 0 0 30.011065 30.56245h616.290225a29.853527 29.853527 0 0 0 29.459681-30.168604v-70.183357a344.615252 344.615252 0 0 0-212.755611-321.535877z" fill="#289FF7" /><path d="M738.146178 634.48591a209.289766 209.289766 0 0 0 22.370453-1.339077 210.628842 210.628842 0 0 1-94.523041-34.107063l-7.87692 3.071998c-6.143998 2.520614-12.130457 5.198767-18.038147 7.87692a210.943919 210.943919 0 0 0 98.067655 24.497222zM907.736266 602.111768l-7.87692-3.071998a219.372223 219.372223 0 0 1-19.062146 11.185226 344.77279 344.77279 0 0 1 194.638694 313.028803v70.183357a29.853527 29.853527 0 0 1-29.459681 30.168604h44.740906a29.853527 29.853527 0 0 0 29.459681-30.168604v-70.183357a344.615252 344.615252 0 0 0-212.440534-321.142031z" fill="#0784D1" opacity=".67" /><path d="M778.239701 641.968984L724.676644 896.157194l51.042442 84.440583 49.467058-82.78643L778.239701 641.968984z" fill="#FCFCFC" /><path d="M897.023655 341.85833l-122.092261-60.494746S662.764053 385.26016 574.306241 387.465697a206.217767 206.217767 0 0 0 77.036278 161.55563l6.616613 5.277537a211.495303 211.495303 0 0 0 190.857772 22.212914c20.952607-33.791987 41.117523-84.283045 51.436288-159.428861a211.337765 211.337765 0 0 0-3.229537-75.224587z" fill="#FFDDCC" /><path d="M897.023655 341.85833c-15.75384-69.474435-64.275668-122.801184-111.773495-159.743939h-10.318766c-110.276881 0-200.625154 92.159965-200.625153 205.587614 88.457812-2.205538 200.625154-106.102113 200.625153-106.102113zM783.674776 639.842215l-5.435075 2.126769s1.96923-0.630154 5.435075-2.126769z" fill="#2B3747" /><path d="M892.061195 554.377633l6.537844-5.356306a206.375305 206.375305 0 0 0 77.036278-161.55563v-6.695382l-78.7692-38.911985a211.337765 211.337765 0 0 1 2.993229 75.382125c-10.318765 75.145817-30.483681 126.030721-51.436288 159.428862a210.707611 210.707611 0 0 0 43.638137-22.212915z" fill="#FFCBBB" /><path d="M897.023655 341.85833l78.7692 38.911985c-3.387076-106.811036-86.646121-193.220849-190.227619-198.655924 47.182751 36.942755 96.019655 90.269504 111.458419 159.743939z" fill="#1D2B3A" /><path d="M572.494549 569.895165a270.572204 270.572204 0 0 1 162.185784-450.874903 435.514909 435.514909 0 1 0-353.043557 748.78002 409.599842 409.599842 0 0 1 190.857773-297.905117z" fill="#FF9C39" /><path d="M411.017688 197.631924h-54.035671v209.526073L233.629449 533.740102l39.935984 30.168604 137.452255-141.075638V197.631924z" fill="#FFFFFF" /></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="177.47px" viewBox="0 0 1154 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M0 0l746.638036 945.827741 66.369622-225.139338z" fill="#C6CBCB" /><path d="M521.902897 462.566354l-51.252546 133.547643L746.638036 945.827741l66.369622-225.139338z" fill="#D672AD" /><path d="M746.638036 945.827741l-68.713981-168.227994L0 0l602.096155 827.235494z" fill="#D1D5D5" /><path d="M677.924055 777.518907l-388.759454 246.481093L0 0z m135.083603-56.587984L0 0l1154.394884 571.296124z" fill="#E2E5E7" /><path d="M411.798847 472.267151l-132.739243 515.759059 10.104997 35.97379 389.163654-246.804453z m695.22381 75.504539L521.902897 462.566354l291.023921 258.687929 341.468066-149.958159z" fill="#EA8EBC" /><path d="M411.798847 472.267151l-132.739243 515.759059 152.221678-493.123865z m110.10405-9.700797l25.949633 23.120233 559.008447 62.085103z" fill="#D672AD" /><path d="M678.328255 777.195547l-77.121339 48.503987 59.013183 48.503987z" fill="#C6CBCB" /><path d="M28.698192 101.535012l23.201074-42.036788L0 0zM62.893503 55.779585l52.384305 1.293439L0 0z" fill="#EA8EBC" /></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M398.302947 908.730277a112.4029 112.4029 0 1 0 224.732669 0H398.302947z" fill="#FF761A" /><path d="M510.705848 1001.095185a112.256637 112.256637 0 0 1-110.501485-92.438039h-1.901416a112.4029 112.4029 0 1 0 224.732669 0h-1.828284a112.329769 112.329769 0 0 1-110.501484 92.438039z" fill="#EF670A" /><path d="M904.006301 740.089362H117.405394a56.164884 56.164884 0 0 0 0 112.329768h786.600907a56.164884 56.164884 0 1 0 0-112.329768z" fill="#005691" /><path d="M769.51773 163.082932C610.968942 33.128506 452.639548 62.966101 378.191824 88.854602A393.446716 393.446716 0 0 0 117.405394 459.191808v280.897554h786.600907V459.191808A392.349746 392.349746 0 0 0 769.51773 163.082932z" fill="#138EE2" /><path d="M769.51773 163.082932C668.230797 80.444496 567.30952 62.307919 488.035126 66.988326c70.571762 4.168488 152.990805 28.448099 235.482979 96.094606A392.349746 392.349746 0 0 1 858.372332 459.191808v280.897554h45.999626V459.191808A392.349746 392.349746 0 0 0 769.51773 163.082932z" fill="#006AA5" opacity=".51" /><path d="M564.749923 80.444496c0-44.463867-29.691332-80.444496-66.330144-80.444496s-66.330143 35.980629-66.330143 80.444496z" fill="#0984C9" /><path d="M290.726717 278.411087h-2.340203a11.774149 11.774149 0 0 1-9.14142-13.894958c6.216166-30.568908 34.225476-88.342683 95.509556-88.342683a11.774149 11.774149 0 1 1 0 23.475166C317.200269 199.429218 302.573997 268.318959 302.573997 269.050273a11.774149 11.774149 0 0 1-11.84728 9.360814zM271.346907 330.334352h-2.340204a11.627886 11.627886 0 0 1-9.14142-13.821827c0.585051-3.071517 1.023839-5.192327 1.316365-6.654953a9.580208 9.580208 0 0 1 0.365657-3.510306 11.84728 11.84728 0 0 1 14.626272-9.433945c11.335361 2.632729 9.360814 12.139806 6.947479 24.279611a11.774149 11.774149 0 0 1-11.774149 9.14142z" fill="#FFFFFF" /></svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="199.42px" viewBox="0 0 1027 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M852.995973 895.203456h-4.423164c-2.249067 0-4.498133-2.249067-8.921297-2.249067l-408.730361-86.589062a55.77685 55.77685 0 0 1-33.286185-22.490666 45.356175 45.356175 0 0 1-6.672231-37.484442l122.199283-562.266637a54.577348 54.577348 0 0 1 51.05381-39.958416h4.423165c2.249067 0 4.498133 2.249067 8.921297 2.249066l408.730361 86.589063a50.229153 50.229153 0 0 1 39.958416 59.975108l-117.70115 559.792664c-11.095395 26.838861-31.411963 42.432389-55.551944 42.432389z m-415.402591-133.294678l422.074822 91.087195 119.950216-573.137125-422.074822-91.012227z" fill="#007FC6" /><path d="M544.199136 444.265612l13.344462-59.975108 333.236693 68.896406-13.644337 62.149205z m31.112087-113.277985l4.423165-31.112087 2.249066-6.672231 333.236694 73.31957-6.672231 37.484442z" fill="#007FC6" /><path d="M173.253093 788.597701a52.478219 52.478219 0 0 1-51.05381-40.033384L4.423164 188.846621a38.98382 38.98382 0 0 1 6.672231-37.484442 50.154184 50.154184 0 0 1 33.361154-22.490666L453.18691 44.456549a12.06999 12.06999 0 0 1 11.095395-4.498133 52.478219 52.478219 0 0 1 51.05381 37.484442l117.776119 562.266638c6.597262 26.688923-13.344462 55.551944-40.033385 62.224174l-408.730361 86.664031zM46.630646 173.253093l119.950216 573.137126 422.074823-91.087195-119.950216-570.88806z" fill="#007FC6" /><path d="M135.468775 424.24892l335.48576-71.070503L479.800864 397.33509h-2.249067l-333.161725 71.370379z m-22.490665-117.701149l335.410791-71.070503L457.310198 279.858848l-335.110915 71.145471z" fill="#007FC6" /><path d="M235.477268 797.44403a27.963394 27.963394 0 0 1-28.863021-28.863021V53.302877a27.963394 27.963394 0 0 1 28.863021-28.86302h553.120433A27.963394 27.963394 0 0 1 817.160846 53.302877v717.527198a27.963394 27.963394 0 0 1-28.86302 28.863021H235.477268z" fill="#66CCFF" /><path d="M235.477268 817.160846a51.653562 51.653562 0 0 1-51.12878-51.128779V51.053811A51.728531 51.728531 0 0 1 235.477268 0h553.120433a53.602753 53.602753 0 0 1 37.484443 15.518559A50.45406 50.45406 0 0 1 839.651512 51.053811v715.278131a51.653562 51.653562 0 0 1-51.053811 51.12878z m-4.423164-42.207482h566.389926V46.630646H231.054104z" fill="#1CA5F9" /><path d="M206.614247 148.813237h615.269639v33.361154H206.614247z m402.05813-48.879713A28.038363 28.038363 0 0 0 637.235522 128.871513a26.838861 26.838861 0 0 0 28.863021-28.937989 28.863021 28.863021 0 1 0-57.726041 0z" fill="#2EB9FF" /><path d="M635.286331 122.199283a20.991288 20.991288 0 0 1-22.490665-22.490666 22.490665 22.490665 0 0 1 44.38158 0 20.991288 20.991288 0 0 1-21.890915 22.490666z m55.551944-22.490666a28.863021 28.863021 0 1 0 57.726042 0 28.863021 28.863021 0 1 0-57.726042 0z" fill="#FFFFFF" /><path d="M719.701296 122.199283a20.991288 20.991288 0 0 1-22.490666-22.490666 22.490665 22.490665 0 1 1 44.38158 0 20.991288 20.991288 0 0 1-21.890914 22.490666z" fill="#FFFFFF" /><path d="M986.290651 635.286331H659.726188v75.568636H581.983454v51.053811h-122.199282v-51.053811h-68.821437V635.286331H39.958416v351.00432h946.332235z" fill="#FFB236" /><path d="M86.664031 1024A88.163409 88.163409 0 0 1 0 937.111062V682.216853a88.163409 88.163409 0 0 1 86.664031-86.888937h304.298704a133.369646 133.369646 0 0 0 266.514386 0H937.111062A88.163409 88.163409 0 0 1 1024 682.216853v254.894209A88.163409 88.163409 0 0 1 937.111062 1024z m0-382.341313a46.855553 46.855553 0 0 0-28.93799 11.39527A38.384069 38.384069 0 0 0 46.630646 682.216853v254.894209a46.630646 46.630646 0 0 0 11.095395 28.863021 38.459038 38.459038 0 0 0 28.93799 11.095395H937.111062a46.630646 46.630646 0 0 0 28.863021-11.095395 38.3091 38.3091 0 0 0 11.095395-28.863021V682.216853a46.780584 46.780584 0 0 0-11.095395-28.86302 38.3091 38.3091 0 0 0-28.863021-11.395271H693.087342l-2.249067 4.423164a180.899919 180.899919 0 0 1-168.829929 124.448349 178.800791 178.800791 0 0 1-168.829929-124.448349l-2.174098-4.423164z" fill="#FFA41F" /><path d="M330.462845 284.581887h360.37543v199.342266H330.462845z" fill="#FFFFFF" /><path d="M389.163482 333.536569h248.371916v33.960905H389.163482zM389.163482 403.782415h248.371916v33.960904H389.163482z" fill="#DCE0E2" /></svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M508.213034 0.023163v732.038057h142.943577v-2.504121a120.406488 120.406488 0 0 1 53.908162-99.399695A344.594881 344.594881 0 0 0 508.213034 0.023163z" fill="#FF9C39" /><path d="M508.213034 0.023163h-9.877367a344.66444 344.66444 0 0 0-179.114214 630.2038 120.8934 120.8934 0 0 1 53.699485 100.164843v1.87809H508.213034z" fill="#FFCB39" /><path d="M652.965143 732.06122H508.213034v84.374968h137.726658a22.050177 22.050177 0 0 0 22.050177-22.050177v-47.64786a14.676932 14.676932 0 0 0-15.024726-14.676931z" fill="#2EB9FF" /><path d="M372.920938 732.06122h-2.643239a22.050177 22.050177 0 0 0-22.050178 22.050177v40.274614a22.050177 22.050177 0 0 0 22.050178 22.050177H508.213034v-84.374968z" fill="#5FD9FF" /><path d="M508.213034 1024h46.604475a82.635995 82.635995 0 0 0 82.635995-82.635995v-42.222263a82.635995 82.635995 0 0 0-82.635995-82.705554H508.213034z" fill="#2EB9FF" /><path d="M469.329598 816.436188a82.635995 82.635995 0 0 0-82.635995 82.705554v42.222263a82.635995 82.635995 0 0 0 82.635995 82.635995H508.213034v-207.563812z" fill="#48CBFF" /><path d="M370.277699 816.436188a22.119736 22.119736 0 0 0-22.050178 22.119736v40.274613a22.050177 22.050177 0 0 0 22.050178 22.050178H508.213034v-84.444527z" fill="#2793FF" /><path d="M645.661456 816.436188H508.213034v84.444527h137.726658a22.050177 22.050177 0 0 0 22.050177-22.050178v-40.274613a22.119736 22.119736 0 0 0-22.328413-22.119736z" fill="#0068FF" /><path d="M507.656562 502.308112l-153.446974-182.939955 22.53709-18.920026L508.213034 457.164374l137.865776-156.994478 22.119736 19.476497-160.541984 182.661719z" fill="#FFF48D" /><path d="M493.257866 479.701464h29.423423v252.359756h-29.423423z" fill="#FFF48D" /></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="180.12px" viewBox="0 0 1137 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M0 506.510163l91.916773 51.056024V222.555835L0 279.744954v226.765209z" fill="#0C4A6D" /><path d="M73.039584 234.344122v312.708188l18.877189 10.513877V222.555835l-18.877189 11.788287z" fill="#146082" /><path d="M629.239605 61.98026v634.974447c0 60.773395 232.898304 77.659318 232.898304 46.993844V15.066067C862.376861-15.838359 629.239605 1.286516 629.239605 61.98026z" fill="#5ABCFF" /><path d="M838.402035 2.401624V756.772295c14.735358-2.389517 23.895175-6.610998 23.895175-12.664443V15.066067c0.079651-6.133095-9.159817-10.274925-23.895175-12.664443z" fill="#2E95CE" /><path d="M917.900906 523.379896m13.560728-10.844775l19.159193-15.321977q13.560728-10.844776 24.405503 2.715952l100.786767 126.02768q10.844776 13.560728-2.715952 24.405503l-19.159193 15.321977q-13.560728 10.844776-24.405504-2.715952l-100.786767-126.02768q-10.844776-13.560728 2.715953-24.405503Z" fill="#FF9545" /><path d="M917.962394 188.82484m10.844775-13.560727l100.786767-126.02768q10.844776-13.560728 24.405503-2.715952l19.159194 15.321976q13.560728 10.844776 2.715952 24.405503l-100.786767 126.02768q-10.844776 13.560728-24.405504 2.715952l-19.159193-15.321976q-13.560728-10.844776-2.715952-24.405503Z" fill="#FF9545" /><path d="M941.065002 389.835298m0.027275-17.363806l0.038536-24.532349q0.027275-17.363806 17.39108-17.336531l161.371882 0.253483q17.363806 0.027275 17.336531 17.39108l-0.038536 24.53235q-0.027275 17.363806-17.39108 17.33653l-161.371882-0.253482q-17.363806-0.027275-17.336531-17.391081Z" fill="#FF9545" /><path d="M113.183478 554.858067l93.430134 14.894659 104.820167 389.013447a89.447605 89.447605 0 0 0 67.862297 62.366406L332.14293 589.506071z" fill="#FF761A" /><path d="M599.370636 632.278434L345.603879 591.895588 493.833614 978.439867a86.420882 86.420882 0 0 0 14.098153-72.561681L426.847473 604.958284l172.523163 27.559101z" fill="#FFC73B" /><path d="M332.14293 589.506071l47.153146 431.387556a111.032912 111.032912 0 0 0 54.003095-1.035457 108.245142 108.245142 0 0 0 60.534443-41.657255L345.603879 591.895588z" fill="#FFAF3B" /><path d="M374.357739 392.052276c-116.369502-52.011831-197.453795-63.720466-260.935309-55.038553v217.844344l485.868555 77.420367v-191.161399C542.420469 446.135021 467.947174 434.107783 374.357739 392.052276z" fill="#0090FF" /><path d="M113.183478 219.847716V337.013723c63.720466-8.602263 144.565808 3.026722 260.93531 55.038553C467.947174 434.107783 542.420469 446.135021 599.370636 441.117035V144.259312z" fill="#1DA2FC" /></svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M897.619834 344.338783a344.333757 344.333757 0 1 0-479.009307 316.965786 81.894464 81.894464 0 0 1 50.267701 75.26192v74.563758h168.745882V736.566489a81.754832 81.754832 0 0 1 50.337518-75.26192 344.403573 344.403573 0 0 0 209.658206-316.965786z" fill="#FFCB39" /><path d="M815.097024 344.338783A344.333757 344.333757 0 1 0 335.878268 661.304569a81.894464 81.894464 0 0 1 50.267701 75.26192v74.563758h168.955331V736.566489a81.894464 81.894464 0 0 1 50.337518-75.26192 344.403573 344.403573 0 0 0 209.658206-316.965786z" fill="#FFCB39" /><path d="M528.152227 0.912638c-5.5853 0-11.1706 0.907611-16.686085 1.605774a344.333757 344.333757 0 0 1 93.972676 658.786157 81.894464 81.894464 0 0 0-50.337518 75.26192v74.563758h82.52281V736.566489a81.754832 81.754832 0 0 1 50.337518-75.26192A344.403573 344.403573 0 0 0 528.152227 0.912638z" fill="#FFA310" /><path d="M190.660463 751.716616m74.843022 0l492.972558 0q74.843023 0 74.843023 74.843022l0 13.61417q0 74.843023-74.843023 74.843022l-492.972558 0q-74.843023 0-74.843022-74.843022l0-13.61417q0-74.843023 74.843022-74.843022Z" fill="#FFCB39" /><path d="M758.476043 751.716616H265.503485a74.633574 74.633574 0 0 0-60.879772 31.417313h489.621378a74.843023 74.843023 0 0 1 74.843022 74.843023v13.96325a74.70339 74.70339 0 0 1-13.96325 43.355893h3.35118a74.843023 74.843023 0 0 0 74.843023-74.843022v-13.963251a74.843023 74.843023 0 0 0-74.843023-74.773206z" fill="#EF680C" /><path d="M773.835619 1024h-523.621893a27.926501 27.926501 0 1 1 0-55.853002h523.621893a27.926501 27.926501 0 0 1 0 55.853002z" fill="#FFCB39" /><path d="M282.329202 192.418618a11.030968 11.030968 0 0 1-3.630445-0.628346 10.472438 10.472438 0 0 1-6.14383-13.474537c39.166918-104.724379 151.08237-92.297086 152.269246-92.157453a10.472438 10.472438 0 0 1-2.583201 20.944876c-3.979526-0.488714-96.765326-10.681887-130.067678 78.6131a10.472438 10.472438 0 0 1-9.844092 6.70236zM271.647315 236.263225a10.472438 10.472438 0 0 1-10.472437-9.774276 35.95537 35.95537 0 0 1 6.004197-21.992119A10.472438 10.472438 0 0 1 284.214241 216.435409a15.499208 15.499208 0 0 0-2.164304 8.517583 10.402622 10.402622 0 0 1-9.774275 11.100784z" fill="#FFFBF0" /></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M617.799864 133.119344l-0.704848 754.187293c-14.096959 43.991322-38.916417 74.449563-74.449563 91.365914-122.934291 58.616917-245.665938 60.379036-368.194942 5.286359-57.092683-25.72695-85.550918-71.189642-85.462812-134.53785 0.237886-226.670286 0.29075-453.243656 0.176212-679.73773-0.088106-95.947426 82.555315-141.233905 164.758205-159.471846 117.18097-26.079374 315.507558-8.017645 363.877748 122.90786z m-80.616983 18.326046c0-48.22041-82.123595-87.313038-183.436676-87.313038s-183.436676 39.092629-183.436675 87.313038 82.123595 87.313038 183.436675 87.313038 183.436676-39.092629 183.436676-87.313038z m-132.599518 390.485757c-0.352424-19.973628-1.259916-32.185119-2.731286-36.652092-17.885516-54.713821-113.832942-44.40542-104.758025 26.079373 3.171816 24.229148-22.819452 13.832641-33.215959 15.594761-57.180789 9.867871-57.709425 96.299849-4.052875 105.639085 12.775369 2.20265 39.471485-9.515447 37.445046 15.15423-7.400903 89.603794 125.286721 77.268955 104.405601-7.929539a6.3172 6.3172 0 0 1 1.356832-5.709268 6.114556 6.114556 0 0 1 5.42733-2.044059c99.912195 12.687263 89.868112-120.000361 0.528636-106.520145a3.788558 3.788558 0 0 1-4.4053-3.612346z m118.854983 305.022945a13.709292 13.709292 0 0 0-11.400915-0.088106c-3.621156 1.62115-6.343631 4.740102-7.453767 8.546282-14.978019 51.189581-105.198555 61.233665-148.899127 60.616922a15.092556 15.092556 0 0 0-8.281963 2.114544c-13.920747 8.986811-15.180662 18.475827-3.788558 28.458236 2.06168 1.76212 4.819398 2.819392 7.841434 2.995603 52.951701 2.731286 171.806685-13.127793 184.053417-80.176453 1.876658-10.281969-2.140976-17.770979-12.070521-22.467028z" fill="#E2F0FA" /><path d="M617.799864 133.119344c85.991448 5.400897 171.921223 11.541885 257.798133 18.414152 37.268835 2.995604 59.295333 18.590364 59.295333 56.916471 0.114538 207.75393 0.14978 415.446185 0.088106 623.085577 0 45.374586-14.449383 74.009033-63.876844 69.603734a3553.490877 3553.490877 0 0 0-254.009576-13.832641l0.704848-754.187293z m229.07558 154.714122c5.022042-0.026432 9.815008-3.436134 13.339247-9.462584 3.52424-6.03526 5.471382-14.202686 5.427329-22.704914-0.044053-8.511039-2.079301-16.652033-5.665215-22.65205-3.585914-5.991207-8.422933-9.348046-13.444975-9.321614-5.022042 0.026432-9.823818 3.436134-13.348057 9.462583-3.52424 6.03526-5.471382 14.202686-5.42733 22.704914 0.044053 8.511039 2.079301 16.652033 5.665216 22.64324 3.585914 6.000018 8.422933 9.356856 13.444974 9.330425z m17.533092 41.057392a17.268774 17.268774 0 0 0-17.268774-17.268774h-0.528636a17.268774 17.268774 0 0 0-17.268775 17.268774v453.569648a17.268774 17.268774 0 0 0 17.268775 17.268775h0.528636a17.268774 17.268774 0 0 0 17.268774-17.268775v-453.569648z" fill="#C8DAE5" /><path d="M170.30953 151.44539a183.436676 87.313038 0 1 0 366.873351 0 183.436676 87.313038 0 1 0-366.873351 0Z" fill="#C8DAE5" /><path d="M846.531311 223.692743a32.070581 18.942788 89.7 1 0 0.335841 64.140283 32.070581 18.942788 89.7 1 0-0.335841-64.140283Z" fill="#9EBED1" /><path d="M829.342351 311.622084m17.268775 0l0.528636 0q17.268774 0 17.268774 17.268774l0 453.569648q0 17.268774-17.268774 17.268775l-0.528636 0q-17.268774 0-17.268775-17.268775l0-453.569648q0-17.268774 17.268775-17.268774Z" fill="#9EBED1" /><path d="M408.988663 545.543493c89.339476-13.480217 99.383559 119.207407-0.528636 106.520145a6.114556 6.114556 0 0 0-5.42733 2.044059 6.3172 6.3172 0 0 0-1.356832 5.709268c20.88112 85.198494-111.806504 97.533333-104.405601 7.929539 2.026438-24.669678-24.669678-12.951581-37.445046-15.15423-53.656549-9.339235-53.127913-95.771214 4.052875-105.639085 10.396507-1.76212 36.387775 8.634387 33.215959-15.594761-9.074917-70.484794 86.872508-80.793195 104.758025-26.079373 1.47137 4.466974 2.378862 16.678464 2.731286 36.652092a3.788558 3.788558 0 0 0 4.4053 3.612346z" fill="#DC1C4B" /><path d="M523.438346 846.954092c9.929545 4.696049 13.947179 12.185059 12.070521 22.467028-12.246733 67.04866-131.101716 82.907739-184.053417 80.176453a13.110172 13.110172 0 0 1-7.841434-2.995603c-11.392105-9.982409-10.132189-19.471424 3.788558-28.458236 2.290756-1.436128 5.180632-2.167407 8.281963-2.114544 43.700572 0.616742 133.921108-9.427341 148.899127-60.616922 1.110136-3.797368 3.832611-6.925131 7.453767-8.546282 3.621156-1.629961 7.78857-1.594718 11.400915 0.088106z" fill="#C8DAE5" /></svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.6 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M794.26099 187.345109l-98.005181-100.932034c26.607742-27.938129 64.302042-73.792137 96.674794-83.903078 44.523621-13.836026 94.989638 31.92929 86.918623 78.670223-6.385858 37.162146-57.561414 78.58153-85.588236 106.164889z" fill="#82ABC4" /><path d="M696.255809 86.413075l98.005181 100.932034c38.847303 31.042365 26.696434 63.592502-3.813776 95.610484-32.9936 34.678757-58.803109 65.721122-106.785736 42.838464a1398.13039 1398.13039 0 0 0-123.282536-123.637306c-36.629991-51.175556 10.288327-82.040537 42.483694-114.147211 30.332825-30.244133 62.262115-35.743066 93.393173-1.596465z m33.942609 155.743981a16.85157 16.85157 0 0 0 0-23.831667l-72.373057-72.373057a16.85157 16.85157 0 0 0-23.831668 0l-1.126394 1.126394a16.85157 16.85157 0 0 0 0 23.831668l72.373057 72.373057a16.85157 16.85157 0 0 0 23.831667 0l1.126395-1.126395z" fill="#9EBED1" /><path d="M560.378942 202.156751c43.698781 38.669918 84.790003 79.88531 123.282536 123.637306l-121.065225 120.976532-45.58793-12.505638c-14.838251-4.079854-22.793965-13.632033-23.858275-28.647669-3.104237-41.508077-35.831759-52.860713-66.164584-70.067053l133.393478-133.393478z" fill="#E2F0FA" /><path d="M426.985464 335.550229c30.332825 17.20634 63.060348 28.558976 66.164584 70.067053 1.06431 15.015636 9.020024 24.567815 23.858275 28.647669l45.58793 12.505638c-87.512862 92.887626-152.551052 158.608748-195.123438 197.163366-12.887016 11.707406-30.74968 15.281713-53.570253 10.731789a8.913593 8.913593 0 0 0-7.627553 1.951234c-72.018287 60.754343-132.950016-8.337092-76.275526-78.049375a8.869247 8.869247 0 0 0 1.685157-7.716245c-5.383633-21.286193-2.988936-37.605608 7.184091-48.958245 24.301737-27.255197 87.007315-89.375404 188.116733-186.342884zM236.562726 721.362483c2.11975 0.860317 3.849253 2.430174 4.878086 4.434623 26.607742 52.328558 89.490704 188.648888 65.809815 244.436453-32.816215 77.162451-144.923499 69.002743-161.952454-9.933557-13.126486-60.754343 41.419384-179.690948 69.712283-234.502896 1.41021-2.820421 3.636391-4.83374 6.11978-5.498933 4.904694-1.303779 10.048857-0.949009 15.43249 1.06431zM347.871779 738.391437c46.208778 22.793965 132.861323 70.244438 102.705882 132.240476-30.51021 62.528193-107.583969 37.162146-117.34014-25.809509a508.092564 508.092564 0 0 1-5.587626-92.417556c0.532155-15.725175 7.272783-20.399269 20.221884-14.013411z" fill="#4895EF" /><path d="M645.910711 134.035155m11.915859 11.915859l72.373166 72.373166q11.915859 11.915859 0 23.831718l-1.128871 1.128871q-11.915859 11.915859-23.831718 0l-72.373166-72.373166q-11.915859-11.915859 0-23.831718l1.128871-1.128871q11.915859-11.915859 23.831718 0Z" fill="#82ABC4" /></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M250.360628 100.189363c4.40461-9.628477 4.642458-21.194981 0.704737-34.708323 0.352369-49.243535 55.586173-90.294496 94.699106-47.657875 34.091678 37.262997 23.696799 171.867865-58.669399 138.833293-22.489936-8.985404-34.734751-27.801896-36.734444-56.467095zM599.910443 63.366827c-4.052241 13.213829-2.995135 25.846249 3.171319 37.879643-3.083227-0.880922-4.756978 4.668886-4.845071 7.311652-3.347503 72.147505-109.850963 73.821256-108.265303-14.270935 0.616645-31.184636-5.6379-60.343151 22.287325-82.013831 40.786685-31.713189 85.008965 3.876056 87.65173 51.093471z" fill="#4F697D" /><path d="M599.910443 63.366827c52.150577 3.876056 68.271448 34.355955 68.183356 84.832781-0.052855 40.821921 0.088092 81.661461 0.440461 122.536238l-35.589245-2.554674v-142.797442c0-15.328041-9.954418-23.370858-29.863253-24.13726-6.166453-12.033393-7.22356-24.665814-3.171319-37.879643zM251.065365 65.48104c3.937721 13.513342 3.699872 25.079847-0.704737 34.708323-22.199232 2.528246-33.413368 13.301921-33.651217 32.329835a5595.968365 5595.968365 0 0 0 0.352368 140.418953l-35.589245 1.849936c-0.757593-43.394213-0.405224-86.770808 1.057106-130.112167 1.673752-48.538797 17.794623-77.256852 68.535725-79.19488z" fill="#9EBED1" /><path d="M632.945015 268.181172l35.589245 2.554674c26.427657 15.213521 38.029399 40.143612 34.796416 74.79027-13.478105 146.937775-116.105508 250.534192-261.986177 264.717035-13.442868-4.933163-25.106275-3.083227-34.9726 5.549809 0.79283-4.668886-0.880922-6.783099-5.549808-7.399745-145.704485-16.649424-256.260185-132.754932-254.938802-280.749813 0.264277-26.51575 14.094751-41.139053 35.589245-52.855315l35.589245-1.849936c5.585045 6.695007 12.86146 10.985096 21.846864 12.86146 14.623304 3.171319 22.023048 14.270935 22.199232 33.298848 1.497567 224.72318 315.722414 232.475293 328.143413 8.721127 1.647324-29.246608 16.208963-49.120206 43.693727-59.638414z" fill="#4F697D" /><path d="M807.279462 845.537395l-35.941615 2.202304c0.528553-47.745968 12.06863-167.727532-12.332906-205.783359-28.013317-43.605635-104.12497-39.289117-126.059926 10.04251-10.747247 24.13726-5.725992 59.638414-11.011524 81.221001-24.577721 100.425098-164.732398 111.172346-205.166714 15.768502-15.239949-35.941614-7.311652-90.823049-10.394878-133.195393 9.866325-8.633035 21.529732-10.482971 34.9726-5.549809 2.02612 39.993855-5.461716 105.182076 13.037644 137.07145 25.72292 44.574649 102.89168 43.958003 126.676571-5.197439 14.447119-29.687068 2.907042-67.742895 17.970807-98.751347 56.29091-115.400771 208.161848-74.614086 207.897572 54.176698-0.176184 49.393292-0.052855 98.724919 0.352369 147.994882z" fill="#9EBED1" /><path d="M807.279462 845.537395c31.889373 20.789757 65.188222 33.210756 70.033292 74.79027 13.830474 117.426891-151.254293 143.149811-171.779773 35.324969-9.628477-50.679438 12.306479-86.647479 65.804866-107.912935l35.941615-2.202304z" fill="#4F697D" /></svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.3 KiB

Some files were not shown because too many files have changed in this diff Show more