diff --git a/components/flow-board/drawnix-workspace.tsx b/components/flow-board/drawnix-workspace.tsx index 45fee97a2..b2b0d0d18 100644 --- a/components/flow-board/drawnix-workspace.tsx +++ b/components/flow-board/drawnix-workspace.tsx @@ -1,6 +1,9 @@ "use client"; import "./xmind-native.css"; +import { XmindMarkerPanel } from "./xmind-marker-panel"; +import { withXmindMarkers } from "./mind-marker-board"; +import { getXmindMarker, getXmindMarkerIds, toggleXmindMarker, type XmindMarker } from "@/lib/flow-board/xmind-markers"; import { XmindSearchPanel } from "./xmind-search-panel"; import { XmindPresentation } from "./xmind-presentation"; import { replaceTopicText, type TopicSearchResult } from "@/lib/flow-board/topic-search"; @@ -82,17 +85,10 @@ import { XmindSheetBar, } from "@/components/flow-board/xmind-editor-chrome"; import { - CheckCircle2, - ChevronDown, FileText, - Flag, Loader2, - type LucideIcon, Plus, - Star, - Tag, Trash2, - UserRound, X, } from "lucide-react"; import { useTheme } from "next-themes"; @@ -105,7 +101,7 @@ import { useRef, useState, } from "react"; -import { toast } from "sonner"; +import { toast as appToast } from "sonner"; import { insertMindAnnotation, withMindAnnotations } from "./mind-annotation-board"; import { isMindAnnotation, validateTopicRange } from "@/lib/flow-board/mind-annotations"; import { XmindAnnotationPanel } from "./xmind-annotation-panel"; @@ -116,6 +112,15 @@ import { SPECIAL_MIND_LAYOUTS, isSpecialMindLayout } from "@/lib/flow-board/mind import { applyOutlineCommand, renameOutlineTopic, type OutlineCommand, type OutlineDrop } from "@/lib/flow-board/mind-outline"; import { getTopicEntries, patchTopicDetails, type TopicDetails } from "@/lib/flow-board/topic-details"; +// Keep editor feedback away from the floating tools and their hover targets. +const toast = { + ...appToast, + success: (message: Parameters[0], options?: Parameters[1]) => appToast.success(message, { position: "bottom-center", ...options }), + info: (message: Parameters[0], options?: Parameters[1]) => appToast.info(message, { position: "bottom-center", ...options }), + error: (message: Parameters[0], options?: Parameters[1]) => appToast.error(message, { position: "bottom-center", ...options }), + warning: (message: Parameters[0], options?: Parameters[1]) => appToast.warning(message, { position: "bottom-center", ...options }), +}; + type FlowBoardWorkspaceProps = { siteName: string; siteLogo: string | null; @@ -161,30 +166,10 @@ type FlowBoardCloudFilePayload = FlowBoardCloudFile & { snapshot?: unknown; }; -type FlowBoardMarkerGroupId = - | "tag" - | "priority" - | "task" - | "flag" - | "star" - | "avatar" - | "symbol"; - -type FlowBoardMarkerItem = { - name: string; - label: string; -}; - -type FlowBoardMarkerGroup = { - id: FlowBoardMarkerGroupId; - label: string; - icon: LucideIcon; - markers: FlowBoardMarkerItem[]; -}; - type FlowBoardMarkerSelectionState = { count: number; names: string[]; + mixedNames: string[]; }; type FlowBoardSelectionStyleState = { @@ -228,7 +213,7 @@ const FLOW_BOARD_LAYOUT_OPTIONS: FlowBoardLayoutOption[] = [ }, ...Object.entries(SPECIAL_MIND_LAYOUTS).map(([id, value]) => ({ id, label: value.label, preview: value.preview })), ]; -const FLOW_BOARD_PLUGINS = [withSpecialMindLayouts]; +const FLOW_BOARD_PLUGINS = [withSpecialMindLayouts, withXmindMarkers]; const FLOW_BOARD_THEME_OPTIONS: FlowBoardThemeOption[] = [ { id: "default", label: "经典", colors: ["#2f6feb", "#8fb3ff", "#dbe7ff"] }, { id: "colorful", label: "彩虹", colors: ["#ef6461", "#f4c95d", "#5abf90"] }, @@ -237,108 +222,6 @@ const FLOW_BOARD_THEME_OPTIONS: FlowBoardThemeOption[] = [ { id: "dark", label: "深色", colors: ["#24272d", "#59616e", "#9aa4b2"] }, { id: "starry", label: "星空", colors: ["#243b74", "#5471c6", "#9cadf0"] }, ]; -const FLOW_BOARD_MARKER_GROUPS: FlowBoardMarkerGroup[] = [ - { - id: "tag", - label: "标签", - icon: Tag, - markers: [ - { name: "🔴", label: "红色" }, - { name: "🟠", label: "橙色" }, - { name: "🟡", label: "黄色" }, - { name: "🟢", label: "绿色" }, - { name: "🔵", label: "蓝色" }, - { name: "🟣", label: "紫色" }, - { name: "⚪", label: "灰色" }, - ], - }, - { - id: "priority", - label: "优先级", - icon: CheckCircle2, - markers: [ - { name: "1️⃣", label: "优先级 1" }, - { name: "2️⃣", label: "优先级 2" }, - { name: "3️⃣", label: "优先级 3" }, - { name: "4️⃣", label: "优先级 4" }, - { name: "5️⃣", label: "优先级 5" }, - { name: "6️⃣", label: "优先级 6" }, - { name: "7️⃣", label: "优先级 7" }, - ], - }, - { - id: "task", - label: "任务", - icon: CheckCircle2, - markers: [ - { name: "▶️", label: "开始" }, - { name: "◔", label: "25%" }, - { name: "◑", label: "50%" }, - { name: "◕", label: "75%" }, - { name: "🚧", label: "处理中" }, - { name: "✅", label: "完成" }, - ], - }, - { - id: "flag", - label: "旗帜", - icon: Flag, - markers: [ - { name: "🚩", label: "红旗" }, - { name: "🏁", label: "终点" }, - { name: "🏳️", label: "白旗" }, - { name: "🎯", label: "目标" }, - { name: "📍", label: "定位" }, - { name: "📌", label: "固定" }, - ], - }, - { - id: "star", - label: "星星", - icon: Star, - markers: [ - { name: "⭐", label: "星标" }, - { name: "🌟", label: "重点" }, - { name: "✨", label: "亮点" }, - { name: "💫", label: "灵感" }, - { name: "🔥", label: "高热" }, - { name: "💎", label: "价值" }, - ], - }, - { - id: "avatar", - label: "人像", - icon: UserRound, - markers: [ - { name: "👤", label: "成员" }, - { name: "🙋", label: "负责人" }, - { name: "👥", label: "多人" }, - { name: "🧑‍💻", label: "执行" }, - { name: "🧑‍🎨", label: "创意" }, - { name: "🧑‍💼", label: "业务" }, - ], - }, - { - id: "symbol", - label: "符号", - icon: Tag, - markers: [ - { name: "❗", label: "注意" }, - { name: "❓", label: "疑问" }, - { name: "💡", label: "想法" }, - { name: "❤️", label: "喜欢" }, - { name: "⚡", label: "快速" }, - { name: "🔗", label: "关联" }, - ], - }, -]; -const FLOW_BOARD_MARKER_NAMES_BY_GROUP = new Map( - FLOW_BOARD_MARKER_GROUPS.map((group) => [ - group.id, - new Set(group.markers.map((marker) => marker.name)), - ]) -); - function isFlowBoardRecord(value: unknown): value is Record { return Boolean(value) && typeof value === "object" && !Array.isArray(value); } @@ -645,15 +528,6 @@ function sortCloudFiles(files: FlowBoardCloudFile[]) { ); } -function getFlowBoardElementEmojiNames(element: MindElement) { - const emojis = Array.isArray(element.data?.emojis) - ? element.data.emojis - : []; - return emojis - .map((emoji) => String(emoji?.name || "").trim()) - .filter(Boolean); -} - function getExistingFlowBoardMindElements( board: PlaitBoard, elements: MindElement[] @@ -718,20 +592,18 @@ function getFlowBoardMarkerSelectionState( selectedElements?: MindElement[] ): FlowBoardMarkerSelectionState { if (!board) { - return { count: 0, names: [] }; + return { count: 0, names: [], mixedNames: [] }; } - const targetElements = selectedElements || getSelectedMindElements(board); - const names = new Set(); - targetElements.forEach((element) => { - getFlowBoardElementEmojiNames(element).forEach((name) => { - names.add(name); - }); + const targetElements = uniqueFlowBoardMindElements(getExistingFlowBoardMindElements(board, selectedElements || getSelectedMindElements(board))); + const counts = new Map(); + targetElements.forEach(element => { + getXmindMarkerIds(element.data?.emojis).forEach(id => counts.set(id, (counts.get(id) || 0) + 1)); }); - return { count: targetElements.length, - names: Array.from(names), + names: [...counts].filter(([, count]) => count === targetElements.length).map(([id]) => id), + mixedNames: [...counts].filter(([, count]) => count < targetElements.length).map(([id]) => id), }; } @@ -802,43 +674,6 @@ function persistFlowBoardTopicEditors( ); } -function updateFlowBoardElementMarker( - board: PlaitBoard, - element: MindElement, - group: FlowBoardMarkerGroup, - marker: FlowBoardMarkerItem -) { - const groupMarkerNames = - FLOW_BOARD_MARKER_NAMES_BY_GROUP.get(group.id) || new Set(); - const currentEmojis = Array.isArray(element.data?.emojis) - ? element.data.emojis - : []; - const isAlreadyApplied = currentEmojis.some( - (emoji) => emoji.name === marker.name - ); - const nextEmojis = isAlreadyApplied - ? currentEmojis.filter((emoji) => !groupMarkerNames.has(emoji.name)) - : [ - ...currentEmojis.filter((emoji) => !groupMarkerNames.has(emoji.name)), - { name: marker.name }, - ]; - const nextData = { ...element.data }; - - if (nextEmojis.length > 0) { - nextData.emojis = nextEmojis; - } else { - delete nextData.emojis; - } - - Transforms.setNode( - board, - { - data: nextData, - }, - PlaitBoard.findPath(board, element) - ); -} - function getFlowBoardPastePoint(board: PlaitBoard): Point { const movingPoint = PlaitBoard.getMovingPointInBoard(board); if (movingPoint) { @@ -981,6 +816,7 @@ export function DrawnixWorkspace({ useState({ count: 0, names: [], + mixedNames: [], }); const [selectionStyleState, setSelectionStyleState] = useState(() => @@ -1042,7 +878,7 @@ export function DrawnixWorkspace({ const board = boardRef.current; if (!board) { selectedMindElementsRef.current = []; - setMarkerSelectionState({ count: 0, names: [] }); + setMarkerSelectionState({ count: 0, names: [], mixedNames: [] }); setSelectionStyleState(getFlowBoardSelectionStyleState(null, [])); return; } @@ -1054,7 +890,7 @@ export function DrawnixWorkspace({ if (annotation) { setSelectedTopicId(null); selectedMindElementsRef.current = []; - setMarkerSelectionState({ count: 0, names: [] }); + setMarkerSelectionState({ count: 0, names: [], mixedNames: [] }); return; } const selectedElements = getFlowBoardSelectedMindElements( @@ -1078,7 +914,7 @@ export function DrawnixWorkspace({ if (!options.preserveFallback) { setSelectedTopicId(null); selectedMindElementsRef.current = []; - setMarkerSelectionState({ count: 0, names: [] }); + setMarkerSelectionState({ count: 0, names: [], mixedNames: [] }); setSelectionStyleState(getFlowBoardSelectionStyleState(null, [])); return; } @@ -1185,7 +1021,7 @@ export function DrawnixWorkspace({ ? new Date(nextSnapshot.updatedAt) : null ); - setMarkerSelectionState({ count: 0, names: [] }); + setMarkerSelectionState({ count: 0, names: [], mixedNames: [] }); setSelectionStyleState(getFlowBoardSelectionStyleState(null, [])); selectedMindElementsRef.current = []; updateBrowserFileParam(file.id); @@ -1300,7 +1136,7 @@ export function DrawnixWorkspace({ setCurrentFileId(null); setCurrentTitle("流程白板"); setLastSavedAt(null); - setMarkerSelectionState({ count: 0, names: [] }); + setMarkerSelectionState({ count: 0, names: [], mixedNames: [] }); setSelectionStyleState( getFlowBoardSelectionStyleState(null, []) ); @@ -1401,6 +1237,7 @@ export function DrawnixWorkspace({ theme: value.theme, viewport: value.viewport, }); + refreshMarkerSelectionState({ preserveFallback: shellControlInteractionRef.current }); }, [refreshMarkerSelectionState, updateSnapshot] ); @@ -1515,70 +1352,35 @@ export function DrawnixWorkspace({ } }, [handleJumpToTopic]); - const handleApplyFlowBoardMarker = useCallback( - (group: FlowBoardMarkerGroup, marker: FlowBoardMarkerItem) => { - const board = boardRef.current; - if (!board) { - return; - } - - const selectedElements = getActiveMarkerElements(); - if (selectedElements.length === 0) { - toast.info("请先选中一个思维导图节点"); - return; - } - - selectedElements.forEach((element) => { - updateFlowBoardElementMarker(board, element, group, marker); + const handleApplyFlowBoardMarker = useCallback((marker: XmindMarker) => { + const board = boardRef.current; + if (!board) return; + const elements = uniqueFlowBoardMindElements(getExistingFlowBoardMindElements(board, getActiveMarkerElements())); + if (!elements.length) { toast.info("请先选中一个主题"); return; } + const remove = elements.every(element => getXmindMarkerIds(element.data?.emojis).includes(marker.id)); + PlaitHistoryBoard.withNewBatch(board, () => { + elements.forEach(element => { + const data = { ...element.data, emojis: toggleXmindMarker(element.data?.emojis || [], marker.id, remove) }; + Transforms.setNode(board, { data }, PlaitBoard.findPath(board, element)); }); - refreshMarkerSelectionState({ preserveFallback: true }); - }, - [getActiveMarkerElements, refreshMarkerSelectionState] - ); + }); + refreshMarkerSelectionState({ preserveFallback: true }); + }, [getActiveMarkerElements, refreshMarkerSelectionState]); const handleClearFlowBoardMarkers = useCallback(() => { const board = boardRef.current; - if (!board) { - return; - } - - const selectedElements = getActiveMarkerElements(); - if (selectedElements.length === 0) { - toast.info("请先选中一个思维导图节点"); - return; - } - - const allMarkerNames = new Set( - FLOW_BOARD_MARKER_GROUPS.flatMap((group) => - group.markers.map((marker) => marker.name) - ) - ); - - selectedElements.forEach((element) => { - const currentEmojis = Array.isArray(element.data?.emojis) - ? element.data.emojis - : []; - const nextEmojis = currentEmojis.filter( - (emoji) => !allMarkerNames.has(emoji.name) - ); - if (nextEmojis.length === currentEmojis.length) { - return; - } - - const nextData = { ...element.data }; - if (nextEmojis.length > 0) { - nextData.emojis = nextEmojis; - } else { - delete nextData.emojis; - } - Transforms.setNode( - board, - { data: nextData }, - PlaitBoard.findPath(board, element) - ); + if (!board) return; + const elements = uniqueFlowBoardMindElements(getExistingFlowBoardMindElements(board, getActiveMarkerElements())); + if (!elements.length) { toast.info("请先选中一个主题"); return; } + PlaitHistoryBoard.withNewBatch(board, () => { + elements.forEach(element => { + const data = { ...element.data, emojis: (element.data?.emojis || []).filter(emoji => !getXmindMarker(emoji.name)) }; + const xmind = isFlowBoardRecord(element.xmind) ? { ...element.xmind } : {}; + delete xmind.markers; + Transforms.setNode(board, { data, xmind }, PlaitBoard.findPath(board, element)); + }); }); refreshMarkerSelectionState({ preserveFallback: true }); - toast.success("已清空所选节点标记"); }, [getActiveMarkerElements, refreshMarkerSelectionState]); const handleInsertFlowBoardAbstract = useCallback(() => { @@ -2021,7 +1823,7 @@ export function DrawnixWorkspace({ }); selectedMindElementsRef.current = []; selectedMindSelectionRef.current = null; - setMarkerSelectionState({ count: 0, names: [] }); + setMarkerSelectionState({ count: 0, names: [], mixedNames: [] }); setSelectionStyleState(getFlowBoardSelectionStyleState(null, [])); }, [updateSnapshot] @@ -2087,7 +1889,7 @@ export function DrawnixWorkspace({ }); selectedMindElementsRef.current = []; selectedMindSelectionRef.current = null; - setMarkerSelectionState({ count: 0, names: [] }); + setMarkerSelectionState({ count: 0, names: [], mixedNames: [] }); setSelectionStyleState(getFlowBoardSelectionStyleState(null, [])); }, [updateSnapshot]); @@ -2132,7 +1934,7 @@ export function DrawnixWorkspace({ }); selectedMindElementsRef.current = []; selectedMindSelectionRef.current = null; - setMarkerSelectionState({ count: 0, names: [] }); + setMarkerSelectionState({ count: 0, names: [], mixedNames: [] }); setSelectionStyleState(getFlowBoardSelectionStyleState(null, [])); }, [updateSnapshot] @@ -2165,7 +1967,7 @@ export function DrawnixWorkspace({ }); selectedMindElementsRef.current = []; selectedMindSelectionRef.current = null; - setMarkerSelectionState({ count: 0, names: [] }); + setMarkerSelectionState({ count: 0, names: [], mixedNames: [] }); setSelectionStyleState(getFlowBoardSelectionStyleState(null, [])); }, [updateSnapshot] @@ -2230,7 +2032,8 @@ export function DrawnixWorkspace({ toast.success( insertedCount === 1 ? topicId ? "已插入主题图片" : "已粘贴图片到白板" - : `已粘贴 ${insertedCount} 张图片到白板` + : `已粘贴 ${insertedCount} 张图片到白板`, + { position: "bottom-center" } ); } }, [previewMode]); @@ -2632,7 +2435,7 @@ export function DrawnixWorkspace({ setCurrentFileId(null); setCurrentTitle("流程白板"); setLastSavedAt(null); - setMarkerSelectionState({ count: 0, names: [] }); + setMarkerSelectionState({ count: 0, names: [], mixedNames: [] }); setSelectionStyleState(getFlowBoardSelectionStyleState(null, [])); selectedMindElementsRef.current = []; updateBrowserFileParam(null); @@ -2782,6 +2585,7 @@ export function DrawnixWorkspace({ canEditMind={markerSelectionState.count > 0} currentTitle={currentTitle} formatPanelOpen={isFormatPanelVisible} + markerPanelOpen={isMarkerPanelOpen} isSaving={isSavingNow || isImportingMindMap} onBack={() => { window.location.href = "/"; @@ -3001,129 +2805,14 @@ export function DrawnixWorkspace({ ) : null} - {!isZenMode && isMarkerPanelOpen ? ( - - ) : null} + {!isZenMode && isMarkerPanelOpen ? { setIsMarkerPanelOpen(false); setIsFormatPanelOpen(true); }} + /> : null}
; + const renderEmoji = markerBoard.renderEmoji; + markerBoard.renderEmoji = (container, props) => { + const marker = getXmindMarker(props.emojiItem.name); + if (!marker) return renderEmoji(container, props); + const image = document.createElement("img"); + image.className = "mind-node-emoji xmind-topic-marker"; + image.draggable = false; + let currentProps = props; + const update = (next: Partial) => { + currentProps = { ...currentProps, ...next }; + const current = getXmindMarker(currentProps.emojiItem.name); + image.src = current?.asset || marker.asset; + image.alt = current?.name || marker.name; + image.dataset.markerId = current?.id || marker.id; + image.style.width = `${currentProps.fontSize}px`; + image.style.height = `${currentProps.fontSize}px`; + }; + update(props); + container.append(image); + return { update, destroy: () => image.remove() }; + }; + return board; +} diff --git a/components/flow-board/xmind-editor-chrome.tsx b/components/flow-board/xmind-editor-chrome.tsx index 095d3a452..985acd108 100644 --- a/components/flow-board/xmind-editor-chrome.tsx +++ b/components/flow-board/xmind-editor-chrome.tsx @@ -152,7 +152,7 @@ function LayoutPreview({ } export function XmindEditorTopBar({ - activeTool, canEditMind, currentTitle, formatPanelOpen, isSaving, onBack, + activeTool, canEditMind, currentTitle, formatPanelOpen, markerPanelOpen, isSaving, onBack, onImport, onExport, isExporting, onInsertChild, onInsertSibling, onRelationship, onBoundary, relationshipPending, onOpenFiles, onRedo, onSave, onSummary, onTopicDetails, onTitleChange, onTitleCommit, @@ -163,6 +163,7 @@ export function XmindEditorTopBar({ canEditMind: boolean; currentTitle: string; formatPanelOpen: boolean; + markerPanelOpen: boolean; isSaving: boolean; onBack: () => void; onImport: () => void; @@ -191,7 +192,7 @@ export function XmindEditorTopBar({ onToggleOutline: () => void; onPresentation: () => void; }) { - const nativeIcons: Record = {"同级主题":"topic","子主题":"subtopic","联系":"relationship","概要":"summary","外框":"boundary","ZEN 模式":"zen","演示":"pitch","格式":"sidebar","导出 XMind":"export"}; + const nativeIcons: Record = {"同级主题":"topic","子主题":"subtopic","联系":"relationship","概要":"summary","外框":"boundary","ZEN 模式":"zen","演示":"pitch","格式":"sidebar","标记":"marker","导出 XMind":"export"}; const action = (label: string, Icon: LucideIcon, run: () => void, disabled = false, active = false) => ( @@ -251,7 +252,7 @@ export function XmindEditorTopBar({ {action("演示", Presentation, onPresentation)}
- {action("标记", Smile, onToggleMarkers)} + {action("标记", Smile, onToggleMarkers, false, markerPanelOpen)} {action("格式", PanelRight, onToggleFormat, false, formatPanelOpen)}
diff --git a/components/flow-board/xmind-marker-panel.tsx b/components/flow-board/xmind-marker-panel.tsx new file mode 100644 index 000000000..0b6ee632f --- /dev/null +++ b/components/flow-board/xmind-marker-panel.tsx @@ -0,0 +1,46 @@ +"use client"; + +import { useState } from "react"; +import { ChevronDown, Search, X } from "lucide-react"; +import { XMIND_MARKER_GROUPS, type XmindMarker } from "@/lib/flow-board/xmind-markers"; + +export function XmindMarkerPanel({ selectedCount, activeIds, mixedIds, onApply, onClear, onClose }: { + selectedCount: number; + activeIds: string[]; + mixedIds: string[]; + onApply: (marker: XmindMarker) => void; + onClear: () => void; + onClose: () => void; +}) { + const [query, setQuery] = useState(""); + const [showAll, setShowAll] = useState(false); + const [collapsed, setCollapsed] = useState([]); + const needle = query.trim().toLowerCase(); + const groups = XMIND_MARKER_GROUPS.filter(group => showAll || needle || !group.hidden).map(group => ({ + ...group, markers: group.markers.filter(marker => (showAll || needle || !marker.hidden) && (!needle || `${group.label} ${marker.name} ${marker.id}`.toLowerCase().includes(needle))), + })).filter(group => group.markers.length); + return ; +} diff --git a/components/flow-board/xmind-native.css b/components/flow-board/xmind-native.css index b3a62f294..0f5b9d99c 100644 --- a/components/flow-board/xmind-native.css +++ b/components/flow-board/xmind-native.css @@ -15,6 +15,25 @@ .xmind-workspace :is(button,input,textarea,select) { font-family: inherit; } .xmind-workspace button:disabled { cursor: default; opacity: .3; } .xmind-workspace button:focus-visible { outline: 2px solid #35b5ff; outline-offset: 2px; } +.xmind-topic-marker { display:inline-block; object-fit:contain; flex-shrink:0; vertical-align:middle; } +.xmind-marker-search { display:flex; align-items:center; gap:6px; margin:4px 12px; padding:6px 8px; border:1px solid var(--xmind-border); border-radius:7px; background:white; } +.xmind-marker-search input { width:100%; min-width:0; outline:none; background:transparent; font-size:12px; } +.xmind-marker-selection { margin:6px 12px 10px; font-size:11px; color:var(--xmind-muted); } +.xmind-marker-panel .xmind-panel-content { flex:1; overflow-x:hidden; } +.xmind-marker-group { margin-bottom:12px; } +.xmind-marker-group-heading { display:flex; align-items:center; gap:5px; width:100%; height:26px; font-size:12px; font-weight:600; } +.xmind-marker-group-heading > span:last-child { margin-left:auto; font-size:10px; font-weight:400; color:var(--xmind-muted); } +.xmind-marker-group-heading[aria-expanded=false] svg { transform:rotate(-90deg); } +.xmind-marker-grid { display:grid; grid-template-columns:repeat(7,minmax(0,1fr)); gap:3px; } +.xmind-marker-grid button { display:grid; place-items:center; width:100%; height:28px; border:1px solid transparent; border-radius:5px; background:transparent; } +.xmind-marker-grid button:hover:not(:disabled) { background:#e3e6ea; } +.xmind-marker-grid button[aria-pressed=true] { border-color:#387cff; background:#e9f0ff; } +.xmind-marker-grid button[aria-pressed=mixed] { border:1px dashed #387cff; background:#e9f0ff80; } +.xmind-marker-grid img { width:20px; height:20px; object-fit:contain; } +.xmind-marker-more { width:100%; padding:7px; border-radius:6px; color:#3569e8; background:#e9edf4; font-size:12px; } +.xmind-marker-empty { padding:24px 0; text-align:center; color:var(--xmind-muted); } +.xmind-marker-footer { padding:10px 12px; border-top:1px solid var(--xmind-border); } +.xmind-marker-footer button { width:100%; padding:7px; border:1px solid var(--xmind-border); border-radius:6px; background:white; font-size:12px; } .xmind-topbar { position:absolute; top:0; left:0; right:var(--xmind-panel-offset,0px); height:56px; z-index:50; display:flex; align-items:flex-start; padding:12px 12px 0; gap:8px; pointer-events:none; } .xmind-topbar > * { pointer-events:auto; } .xmind-document-heading { display:flex; align-items:center; gap:8px; min-width:200px; } diff --git a/docs/XMind-26.04-客户端界面对照.md b/docs/XMind-26.04-客户端界面对照.md index 5fdb2f872..4029ffa79 100644 --- a/docs/XMind-26.04-客户端界面对照.md +++ b/docs/XMind-26.04-客户端界面对照.md @@ -35,3 +35,12 @@ - 图片按比例缩放,主题图片宽度上限 240px。异步读取/上传后重新查找目标主题,切换画布或目标已删除时不插入其他位置。文字、标题、备注等文本粘贴保留各自原有处理。 - 开发预览直接保存图片数据,避免依赖登录上传;正式页面继续使用原有上传接口。支持 JPEG、PNG、WebP,保留原有大小限制。 - 4 项浏览器用例通过,使用实际剪贴板和粘贴快捷键验证编辑状态、选中状态、空白画布及文字粘贴;同时覆盖图片撤销/重做、XMind 导出嵌入资源和标题/备注不拦截。TypeScript 与本轮文件 Biome 检查通过。正式账号上传接口未在此轮实测。 + +## 2026-10-05 原生标记面板与文件往返 + +- 原先采用少量系统 Emoji 代替原生标记,大部分标记不能导出;旧面板在 240px 侧栏中使用固定宽度网格,会溢出。现使用安装包的标记目录、原生 SVG/PNG 和标记入口图标,默认显示标签、优先级、任务、旗帜、星星、人像、符号 7 组 58 个标记。 +- 提取客户端目录中的 219 份标记资源,包含 197 个不同 ID;共享 ID 按客户端目录顺序解析。搜索可查找隐藏标记,“更多标记”展示完整目录,并用于旧文档导入显示。资源来源和哈希记录在 `public/icons/xmind/markers/`。 +- 选中主题后添加标记,同组替换,再次点击移除;多选显示混合状态,点击后为全部选中主题应用同一值。批量修改和清空各作为一次撤销操作。清空同时移除保留的未知原生标记,撤销可恢复;普通自定义 Emoji 不受影响。 +- 标记在主题上以客户端图标呈现,支持 XMind 导入导出。未识别的 ID 继续作为元数据保留,不能宣称所有第三方自定义标记都可显示。贴纸、插画、自定义标记库及图例交互仍未实现;原先禁用的占位页签已移除。 +- 3 项标记浏览器测试覆盖面板尺寸、实际图标加载、增删替换、清空、批量撤销/重做、搜索和更多标记;2 项数据测试覆盖全部目录资源存在、197 个 ID 文件往返及旧 Emoji 兼容。TypeScript 与本轮文件的 Biome 检查通过。 +- 连续操作发现成功提示会盖住顶部插入菜单;将白板内的提示移至底部,并取消清空标记后的遮挡提示。图片粘贴用例等待画布字体加载后再操作,避免加载中的坐标变化影响双击。 diff --git a/docs/XMind-复刻功能对照.md b/docs/XMind-复刻功能对照.md index fe883ab16..1df2b8ba6 100644 --- a/docs/XMind-复刻功能对照.md +++ b/docs/XMind-复刻功能对照.md @@ -18,7 +18,7 @@ | 联系线 | 基础 | 控制点编辑、箭头、虚线、复杂布局、双向联系 | | 外框 | 基础 | 标题、全形状、嵌套、填充、范围调整 | | 概要 | 基础 | 范围调整、多重概要、完整样式 | -| 图标/标记、贴纸 | 部分标记 | 全标记映射、自定义图标、贴纸库 | +| 图标/标记、贴纸 | 原生标记可用,贴纸/插画待实现 | 自定义标记、图例交互及贴纸/插画库 | | 备注、外链、主题链接、标签 | 基础 | 已验证纯文本备注、标签和外链编辑、撤销、工作表切换、快照序列化;同画布链接可展开折叠分支定位。待补富文本备注、跨画布链接、画布内容标识、真实云端保存重载 | | 图片、附件、音频、公式 | 部分支持 | 新旧 XMind 内嵌 PNG/JPEG/GIF/WebP 导入;附件新增/替换/下载/移除/撤销。待补 SVG、音频、公式、资源导出和真实样本覆盖 | | 任务、待办、进度、日期、负责人、甘特图 | 待实现 | 任务模型、视图和筛选,不能用普通图标替代 | diff --git a/lib/flow-board/xmind-export.ts b/lib/flow-board/xmind-export.ts index 32310716a..832051bc7 100644 --- a/lib/flow-board/xmind-export.ts +++ b/lib/flow-board/xmind-export.ts @@ -1,3 +1,4 @@ +import { getXmindMarker } from "./xmind-markers"; import type { PlaitElement } from "@plait/core"; import { getTopicDetails, @@ -33,15 +34,6 @@ const layouts: Record = { "right-bottom-indented": "org.xmind.ui.tree.right", "left-bottom-indented": "org.xmind.ui.tree.left", }; -const markerIds: Record = { - "✅": "task-done", - "▶️": "task-start", - "🚩": "flag-red", - "⭐": "star-red", - ...Object.fromEntries( - [1, 2, 3, 4, 5, 6, 7].map((n) => [`${n}️⃣`, `priority-${n}`]) - ), -}; const summary = (element: PlaitElement) => Number.isInteger(element.start) && Number.isInteger(element.end); function textOf(value: unknown): string { @@ -192,7 +184,7 @@ export async function exportXmind( if (details.labels.length) topic.labels = details.labels; const markerSet = new Set(); for (const emoji of array(data.emojis)) { - const marker = markerIds[String(emoji.name)]; + const marker = getXmindMarker(String(emoji.name))?.id; if (marker) markerSet.add(marker); else warnings.add("部分自定义图标尚不能写入 XMind 标记"); } @@ -200,7 +192,7 @@ export async function exportXmind( for (const marker of array(metadata.markers)) if ( typeof marker.markerId === "string" && - !Object.values(markerIds).includes(marker.markerId) + !getXmindMarker(marker.markerId) ) markerSet.add(marker.markerId); if (markerSet.size) diff --git a/lib/flow-board/xmind-import.ts b/lib/flow-board/xmind-import.ts index 64bea43aa..d6398d81e 100644 --- a/lib/flow-board/xmind-import.ts +++ b/lib/flow-board/xmind-import.ts @@ -1,4 +1,5 @@ import type JSZip from "jszip"; +import { getXmindMarker, xmindMarkerName } from "./xmind-markers"; import { getTopicEntries } from "./topic-details"; import { SPECIAL_MIND_LAYOUTS, @@ -345,18 +346,7 @@ function convertSheets(sheets: Data[], fallbackTitle: string): ImportedMindMap { const emojis: string[] = []; for (const marker of list(topic.markers)) { const id = text(marker.markerId); - const priority = id.match(/^priority-([1-7])$/); - const mapped = priority - ? `${priority[1]}️⃣` - : ( - { - "task-done": "✅", - "task-start": "▶️", - "flag-red": "🚩", - "star-red": "⭐", - } as Record - )[id]; - if (mapped) emojis.push(mapped); + if (getXmindMarker(id)) emojis.push(xmindMarkerName(id)); else warnings.add("部分图标已保留为数据,暂不显示"); } if (emojis.length) diff --git a/lib/flow-board/xmind-marker-catalog.json b/lib/flow-board/xmind-marker-catalog.json new file mode 100644 index 000000000..28750ffa6 --- /dev/null +++ b/lib/flow-board/xmind-marker-catalog.json @@ -0,0 +1,1428 @@ +[ + { + "id": "tagMarkers", + "label": "标签", + "hidden": false, + "markers": [ + { + "id": "tag-red", + "name": "红色", + "asset": "/icons/xmind/markers/tagMarkers/tag-red.svg", + "hidden": false + }, + { + "id": "tag-orange", + "name": "橙色", + "asset": "/icons/xmind/markers/tagMarkers/tag-orange.svg", + "hidden": false + }, + { + "id": "tag-yellow", + "name": "黄色", + "asset": "/icons/xmind/markers/tagMarkers/tag-yellow.svg", + "hidden": false + }, + { + "id": "tag-green", + "name": "绿色", + "asset": "/icons/xmind/markers/tagMarkers/tag-green.svg", + "hidden": false + }, + { + "id": "tag-blue", + "name": "蓝色", + "asset": "/icons/xmind/markers/tagMarkers/tag-blue.svg", + "hidden": false + }, + { + "id": "tag-dark-purple", + "name": "深紫色", + "asset": "/icons/xmind/markers/tagMarkers/tag-dark-purple.svg", + "hidden": false + }, + { + "id": "tag-grey", + "name": "灰色", + "asset": "/icons/xmind/markers/tagMarkers/tag-grey.svg", + "hidden": false + }, + { + "id": "tag-dark-blue", + "name": "深蓝色", + "asset": "/icons/xmind/markers/tagMarkers/tag-dark-blue.svg", + "hidden": true + } + ] + }, + { + "id": "priorityMarkers", + "label": "优先级", + "hidden": false, + "markers": [ + { + "id": "priority-1", + "name": "优先级 1", + "asset": "/icons/xmind/markers/priorityMarkers/priority-1.svg", + "hidden": false + }, + { + "id": "priority-2", + "name": "优先级 2", + "asset": "/icons/xmind/markers/priorityMarkers/priority-2.svg", + "hidden": false + }, + { + "id": "priority-3", + "name": "优先级 3", + "asset": "/icons/xmind/markers/priorityMarkers/priority-3.svg", + "hidden": false + }, + { + "id": "priority-4", + "name": "优先级 4", + "asset": "/icons/xmind/markers/priorityMarkers/priority-4.svg", + "hidden": false + }, + { + "id": "priority-5", + "name": "优先级 5", + "asset": "/icons/xmind/markers/priorityMarkers/priority-5.svg", + "hidden": false + }, + { + "id": "priority-6", + "name": "优先级 6", + "asset": "/icons/xmind/markers/priorityMarkers/priority-6.svg", + "hidden": false + }, + { + "id": "priority-7", + "name": "优先级 7", + "asset": "/icons/xmind/markers/priorityMarkers/priority-7.svg", + "hidden": false + }, + { + "id": "priority-8", + "name": "优先级 8", + "asset": "/icons/xmind/markers/priorityMarkers/priority-8.svg", + "hidden": true + }, + { + "id": "priority-9", + "name": "优先级 9", + "asset": "/icons/xmind/markers/priorityMarkers/priority-9.svg", + "hidden": true + } + ] + }, + { + "id": "taskMarkers", + "label": "任务", + "hidden": false, + "markers": [ + { + "id": "task-start", + "name": "未开始", + "asset": "/icons/xmind/markers/taskMarkers/task-start.svg", + "hidden": false + }, + { + "id": "task-oct", + "name": "进度 12.5%", + "asset": "/icons/xmind/markers/taskMarkers/task-oct.svg", + "hidden": false + }, + { + "id": "task-quarter", + "name": "进度 25%", + "asset": "/icons/xmind/markers/taskMarkers/task-quarter.svg", + "hidden": true + }, + { + "id": "task-3oct", + "name": "进度 37.5%", + "asset": "/icons/xmind/markers/taskMarkers/task-3oct.svg", + "hidden": false + }, + { + "id": "task-half", + "name": "进度 50%", + "asset": "/icons/xmind/markers/taskMarkers/task-half.svg", + "hidden": false + }, + { + "id": "task-5oct", + "name": "进度 62.5%", + "asset": "/icons/xmind/markers/taskMarkers/task-5oct.svg", + "hidden": false + }, + { + "id": "task-3quar", + "name": "进度 75%", + "asset": "/icons/xmind/markers/taskMarkers/task-3quar.svg", + "hidden": true + }, + { + "id": "task-7oct", + "name": "进度 87.5%", + "asset": "/icons/xmind/markers/taskMarkers/task-7oct.svg", + "hidden": false + }, + { + "id": "task-done", + "name": "完成", + "asset": "/icons/xmind/markers/taskMarkers/task-done.svg", + "hidden": false + }, + { + "id": "task-pause", + "name": "暂停", + "asset": "/icons/xmind/markers/taskMarkers/task-pause.png", + "hidden": true + } + ] + }, + { + "id": "flagMarkers", + "label": "旗帜", + "hidden": false, + "markers": [ + { + "id": "flag-red", + "name": "红色", + "asset": "/icons/xmind/markers/flagMarkers/flag-red.svg", + "hidden": false + }, + { + "id": "flag-orange", + "name": "橙色", + "asset": "/icons/xmind/markers/flagMarkers/flag-orange.svg", + "hidden": false + }, + { + "id": "flag-yellow", + "name": "黄色", + "asset": "/icons/xmind/markers/flagMarkers/flag-yellow.svg", + "hidden": false + }, + { + "id": "flag-green", + "name": "绿色", + "asset": "/icons/xmind/markers/flagMarkers/flag-green.svg", + "hidden": false + }, + { + "id": "flag-blue", + "name": "蓝色", + "asset": "/icons/xmind/markers/flagMarkers/flag-blue.svg", + "hidden": false + }, + { + "id": "flag-purple", + "name": "紫色", + "asset": "/icons/xmind/markers/flagMarkers/flag-purple.svg", + "hidden": false + }, + { + "id": "flag-gray", + "name": "灰色", + "asset": "/icons/xmind/markers/flagMarkers/flag-gray.svg", + "hidden": false + }, + { + "id": "flag-dark-blue", + "name": "深蓝色", + "asset": "/icons/xmind/markers/flagMarkers/flag-dark-blue.svg", + "hidden": true + }, + { + "id": "flag-dark-green", + "name": "深绿色", + "asset": "/icons/xmind/markers/flagMarkers/flag-dark-green.svg", + "hidden": true + }, + { + "id": "flag-dark-gray", + "name": "深灰色", + "asset": "/icons/xmind/markers/flagMarkers/flag-dark-gray.svg", + "hidden": true + } + ] + }, + { + "id": "starMarkers", + "label": "星星", + "hidden": false, + "markers": [ + { + "id": "star-red", + "name": "红色", + "asset": "/icons/xmind/markers/starMarkers/star-red.svg", + "hidden": false + }, + { + "id": "star-orange", + "name": "橙色", + "asset": "/icons/xmind/markers/starMarkers/star-orange.svg", + "hidden": false + }, + { + "id": "star-yellow", + "name": "黄色", + "asset": "/icons/xmind/markers/starMarkers/star-yellow.svg", + "hidden": false + }, + { + "id": "star-green", + "name": "绿色", + "asset": "/icons/xmind/markers/starMarkers/star-green.svg", + "hidden": false + }, + { + "id": "star-blue", + "name": "蓝色", + "asset": "/icons/xmind/markers/starMarkers/star-blue.svg", + "hidden": false + }, + { + "id": "star-purple", + "name": "紫色", + "asset": "/icons/xmind/markers/starMarkers/star-purple.svg", + "hidden": false + }, + { + "id": "star-gray", + "name": "灰色", + "asset": "/icons/xmind/markers/starMarkers/star-gray.svg", + "hidden": false + }, + { + "id": "star-dark-blue", + "name": "深蓝色", + "asset": "/icons/xmind/markers/starMarkers/star-dark-blue.svg", + "hidden": true + }, + { + "id": "star-dark-green", + "name": "深绿色", + "asset": "/icons/xmind/markers/starMarkers/star-dark-green.svg", + "hidden": true + }, + { + "id": "star-dark-gray", + "name": "深灰色", + "asset": "/icons/xmind/markers/starMarkers/star-dark-gray.svg", + "hidden": true + } + ] + }, + { + "id": "peopleMarkers", + "label": "人像", + "hidden": false, + "markers": [ + { + "id": "people-red", + "name": "红色", + "asset": "/icons/xmind/markers/peopleMarkers/people-red.svg", + "hidden": false + }, + { + "id": "people-orange", + "name": "橙色", + "asset": "/icons/xmind/markers/peopleMarkers/people-orange.svg", + "hidden": false + }, + { + "id": "people-yellow", + "name": "黄色", + "asset": "/icons/xmind/markers/peopleMarkers/people-yellow.svg", + "hidden": false + }, + { + "id": "people-green", + "name": "绿色", + "asset": "/icons/xmind/markers/peopleMarkers/people-green.svg", + "hidden": false + }, + { + "id": "people-blue", + "name": "蓝色", + "asset": "/icons/xmind/markers/peopleMarkers/people-blue.svg", + "hidden": false + }, + { + "id": "people-purple", + "name": "紫色", + "asset": "/icons/xmind/markers/peopleMarkers/people-purple.svg", + "hidden": false + }, + { + "id": "people-gray", + "name": "灰色", + "asset": "/icons/xmind/markers/peopleMarkers/people-gray.svg", + "hidden": false + }, + { + "id": "people-dark-blue", + "name": "深蓝色", + "asset": "/icons/xmind/markers/peopleMarkers/people-dark-blue.svg", + "hidden": true + }, + { + "id": "people-dark-green", + "name": "深绿色", + "asset": "/icons/xmind/markers/peopleMarkers/people-dark-green.svg", + "hidden": true + }, + { + "id": "people-dark-gray", + "name": "深灰色", + "asset": "/icons/xmind/markers/peopleMarkers/people-dark-gray.svg", + "hidden": true + } + ] + }, + { + "id": "symbolMarkers", + "label": "符号", + "hidden": false, + "markers": [ + { + "id": "c_symbol_heart", + "name": "喜欢", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_heart.svg", + "hidden": false + }, + { + "id": "c_symbol_like", + "name": "赞", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_like.svg", + "hidden": false + }, + { + "id": "c_symbol_dislike", + "name": "不赞", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_dislike.svg", + "hidden": false + }, + { + "id": "symbol-pin", + "name": "固定", + "asset": "/icons/xmind/markers/symbolMarkers/symbol-pin.svg", + "hidden": false + }, + { + "id": "symbol-idea", + "name": "想法", + "asset": "/icons/xmind/markers/symbolMarkers/symbol-idea.svg", + "hidden": false + }, + { + "id": "symbol-lightning", + "name": "闪电", + "asset": "/icons/xmind/markers/symbolMarkers/symbol-lightning.svg", + "hidden": false + }, + { + "id": "c_symbol_hourglass", + "name": "沙漏", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_hourglass.svg", + "hidden": false + }, + { + "id": "c_symbol_telephone", + "name": "c_symbol_telephone", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_telephone.svg", + "hidden": false + }, + { + "id": "c_symbol_pen", + "name": "笔", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_pen.svg", + "hidden": false + }, + { + "id": "c_symbol_music", + "name": "音乐", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_music.svg", + "hidden": false + }, + { + "id": "symbol-entertainment", + "name": "娱乐", + "asset": "/icons/xmind/markers/symbolMarkers/symbol-entertainment.svg", + "hidden": false + }, + { + "id": "symbol-100", + "name": "百分百", + "asset": "/icons/xmind/markers/symbolMarkers/symbol-100.svg", + "hidden": false + }, + { + "id": "c_symbol_flight", + "name": "航班", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_flight.svg", + "hidden": false + }, + { + "id": "symbol-run", + "name": "运行", + "asset": "/icons/xmind/markers/symbolMarkers/symbol-run.svg", + "hidden": false + }, + { + "id": "symbol-exclam", + "name": "注意", + "asset": "/icons/xmind/markers/symbolMarkers/symbol-exclam.svg", + "hidden": false + }, + { + "id": "symbol-question", + "name": "疑问", + "asset": "/icons/xmind/markers/symbolMarkers/symbol-question.svg", + "hidden": false + }, + { + "id": "symbol-plus", + "name": "加号", + "asset": "/icons/xmind/markers/symbolMarkers/symbol-plus.svg", + "hidden": true + }, + { + "id": "symbol-minus", + "name": "减号", + "asset": "/icons/xmind/markers/symbolMarkers/symbol-minus.svg", + "hidden": true + }, + { + "id": "symbol-info", + "name": "信息", + "asset": "/icons/xmind/markers/symbolMarkers/symbol-info.svg", + "hidden": true + }, + { + "id": "symbol-attention", + "name": "提醒", + "asset": "/icons/xmind/markers/symbolMarkers/symbol-attention.svg", + "hidden": true + }, + { + "id": "symbol-wrong", + "name": "错误", + "asset": "/icons/xmind/markers/symbolMarkers/symbol-wrong.svg", + "hidden": true + }, + { + "id": "symbol-right", + "name": "正确", + "asset": "/icons/xmind/markers/symbolMarkers/symbol-right.svg", + "hidden": true + }, + { + "id": "symbol-pause", + "name": "暂停", + "asset": "/icons/xmind/markers/symbolMarkers/symbol-pause.svg", + "hidden": true + }, + { + "id": "c_simbol-plus", + "name": "加号", + "asset": "/icons/xmind/markers/symbolMarkers/c_simbol-plus.svg", + "hidden": true + }, + { + "id": "c_simbol-minus", + "name": "减号", + "asset": "/icons/xmind/markers/symbolMarkers/c_simbol-minus.svg", + "hidden": true + }, + { + "id": "c_simbol-question", + "name": "疑问", + "asset": "/icons/xmind/markers/symbolMarkers/c_simbol-question.svg", + "hidden": true + }, + { + "id": "c_simbol-info", + "name": "信息", + "asset": "/icons/xmind/markers/symbolMarkers/c_simbol-info.svg", + "hidden": true + }, + { + "id": "c_simbol-wrong", + "name": "错误", + "asset": "/icons/xmind/markers/symbolMarkers/c_simbol-wrong.svg", + "hidden": true + }, + { + "id": "c_simbol-right", + "name": "正确", + "asset": "/icons/xmind/markers/symbolMarkers/c_simbol-right.svg", + "hidden": true + }, + { + "id": "c_simbol-pause", + "name": "暂停", + "asset": "/icons/xmind/markers/symbolMarkers/c_simbol-pause.svg", + "hidden": true + }, + { + "id": "c_symbol_contact", + "name": "联系人", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_contact.svg", + "hidden": true + }, + { + "id": "c_symbol_drink", + "name": "饮料", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_drink.svg", + "hidden": true + }, + { + "id": "c_symbol_line_graph", + "name": "折线图", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_line_graph.svg", + "hidden": true + }, + { + "id": "c_symbol_medals", + "name": "奖牌", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_medals.svg", + "hidden": true + }, + { + "id": "c_symbol_thermometer", + "name": "温度", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_thermometer.svg", + "hidden": true + }, + { + "id": "c_symbol_money", + "name": "金钱", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_money.svg", + "hidden": true + }, + { + "id": "c_symbol_bar_chart", + "name": "柱状图", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_bar_chart.svg", + "hidden": true + }, + { + "id": "c_simbol-exclam", + "name": "注意", + "asset": "/icons/xmind/markers/symbolMarkers/c_simbol-exclam.svg", + "hidden": true + }, + { + "id": "c_symbol_pie_chart", + "name": "饼图", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_pie_chart.svg", + "hidden": true + }, + { + "id": "c_symbol_shopping_cart", + "name": "购物", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_shopping_cart.svg", + "hidden": true + }, + { + "id": "c_symbol_exercise", + "name": "运动", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_exercise.svg", + "hidden": true + }, + { + "id": "c_symbol_trophy", + "name": "奖杯", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_trophy.svg", + "hidden": true + }, + { + "id": "symbol-unlock", + "name": "解锁", + "asset": "/icons/xmind/markers/symbolMarkers/symbol-unlock.svg", + "hidden": true + }, + { + "id": "c_symbol_lock", + "name": "锁定", + "asset": "/icons/xmind/markers/symbolMarkers/c_symbol_lock.svg", + "hidden": true + }, + { + "id": "symbol-diamond", + "name": "钻石", + "asset": "/icons/xmind/markers/symbolMarkers/symbol-diamond.svg", + "hidden": true + } + ] + }, + { + "id": "smileyMarkers", + "label": "情绪", + "hidden": true, + "markers": [ + { + "id": "smiley-laugh", + "name": "smiley-laugh", + "asset": "/icons/xmind/markers/smileyMarkers/smiley-laugh.svg", + "hidden": false + }, + { + "id": "smiley-smile", + "name": "smiley-smile", + "asset": "/icons/xmind/markers/smileyMarkers/smiley-smile.svg", + "hidden": false + }, + { + "id": "smiley-cry", + "name": "smiley-cry", + "asset": "/icons/xmind/markers/smileyMarkers/smiley-cry.svg", + "hidden": false + }, + { + "id": "smiley-surprise", + "name": "smiley-surprise", + "asset": "/icons/xmind/markers/smileyMarkers/smiley-surprise.svg", + "hidden": false + }, + { + "id": "smiley-boring", + "name": "smiley-boring", + "asset": "/icons/xmind/markers/smileyMarkers/smiley-boring.svg", + "hidden": false + }, + { + "id": "smiley-angry", + "name": "smiley-angry", + "asset": "/icons/xmind/markers/smileyMarkers/smiley-angry.svg", + "hidden": false + }, + { + "id": "smiley-embarrass", + "name": "smiley-embarrass", + "asset": "/icons/xmind/markers/smileyMarkers/smiley-embarrass.svg", + "hidden": false + }, + { + "id": "smiley-think", + "name": "smiley-think", + "asset": "/icons/xmind/markers/smileyMarkers/smiley-think.svg", + "hidden": false + }, + { + "id": "smiley-love", + "name": "smiley-love", + "asset": "/icons/xmind/markers/smileyMarkers/smiley-love.svg", + "hidden": false + }, + { + "id": "smiley-sad", + "name": "smiley-sad", + "asset": "/icons/xmind/markers/smileyMarkers/smiley-sad.svg", + "hidden": false + }, + { + "id": "smiley-cry-laugh", + "name": "smiley-cry-laugh", + "asset": "/icons/xmind/markers/smileyMarkers/smiley-cry-laugh.svg", + "hidden": false + }, + { + "id": "smiley-adore", + "name": "smiley-adore", + "asset": "/icons/xmind/markers/smileyMarkers/smiley-adore.svg", + "hidden": false + }, + { + "id": "smiley-devil", + "name": "smiley-devil", + "asset": "/icons/xmind/markers/smileyMarkers/smiley-devil.svg", + "hidden": false + }, + { + "id": "smiley-upset", + "name": "smiley-upset", + "asset": "/icons/xmind/markers/smileyMarkers/smiley-upset.svg", + "hidden": false + } + ] + }, + { + "id": "arrowMarkers", + "label": "箭头", + "hidden": true, + "markers": [ + { + "id": "arrow-left", + "name": "arrow-left", + "asset": "/icons/xmind/markers/arrowMarkers/arrow-left.svg", + "hidden": false + }, + { + "id": "arrow-right", + "name": "arrow-right", + "asset": "/icons/xmind/markers/arrowMarkers/arrow-right.svg", + "hidden": false + }, + { + "id": "arrow-up", + "name": "arrow-up", + "asset": "/icons/xmind/markers/arrowMarkers/arrow-up.svg", + "hidden": false + }, + { + "id": "arrow-down", + "name": "arrow-down", + "asset": "/icons/xmind/markers/arrowMarkers/arrow-down.svg", + "hidden": false + }, + { + "id": "arrow-left-right", + "name": "arrow-left-right", + "asset": "/icons/xmind/markers/arrowMarkers/arrow-left-right.svg", + "hidden": false + }, + { + "id": "arrow-up-down", + "name": "arrow-up-down", + "asset": "/icons/xmind/markers/arrowMarkers/arrow-up-down.svg", + "hidden": false + }, + { + "id": "arrow-refresh", + "name": "arrow-refresh", + "asset": "/icons/xmind/markers/arrowMarkers/arrow-refresh.svg", + "hidden": false + }, + { + "id": "arrow-up-right", + "name": "arrow-up-right", + "asset": "/icons/xmind/markers/arrowMarkers/arrow-up-right.svg", + "hidden": true + }, + { + "id": "arrow-down-right", + "name": "arrow-down-right", + "asset": "/icons/xmind/markers/arrowMarkers/arrow-down-right.svg", + "hidden": true + }, + { + "id": "arrow-down-left", + "name": "arrow-down-left", + "asset": "/icons/xmind/markers/arrowMarkers/arrow-down-left.svg", + "hidden": true + }, + { + "id": "arrow-up-left", + "name": "arrow-up-left", + "asset": "/icons/xmind/markers/arrowMarkers/arrow-up-left.svg", + "hidden": true + } + ] + }, + { + "id": "academicMarkers", + "label": "学术", + "hidden": true, + "markers": [ + { + "id": "c_symbol_quote", + "name": "c_symbol_quote", + "asset": "/icons/xmind/markers/academicMarkers/c_symbol_quote.svg", + "hidden": false + }, + { + "id": "c_symbol_apostrophe", + "name": "c_symbol_apostrophe", + "asset": "/icons/xmind/markers/academicMarkers/c_symbol_apostrophe.svg", + "hidden": false + }, + { + "id": "symbol-question", + "name": "疑问", + "asset": "/icons/xmind/markers/academicMarkers/symbol-question.svg", + "hidden": false + }, + { + "id": "symbol-attention", + "name": "提醒", + "asset": "/icons/xmind/markers/academicMarkers/symbol-attention.svg", + "hidden": false + }, + { + "id": "symbol-pause", + "name": "暂停", + "asset": "/icons/xmind/markers/academicMarkers/symbol-pause.svg", + "hidden": false + }, + { + "id": "symbol-wrong", + "name": "错误", + "asset": "/icons/xmind/markers/academicMarkers/symbol-wrong.svg", + "hidden": false + }, + { + "id": "symbol-about", + "name": "symbol-about", + "asset": "/icons/xmind/markers/academicMarkers/symbol-about.svg", + "hidden": false + }, + { + "id": "symbol-plus", + "name": "加号", + "asset": "/icons/xmind/markers/academicMarkers/symbol-plus.svg", + "hidden": false + }, + { + "id": "symbol-minus", + "name": "减号", + "asset": "/icons/xmind/markers/academicMarkers/symbol-minus.svg", + "hidden": false + }, + { + "id": "symbol-divide", + "name": "symbol-divide", + "asset": "/icons/xmind/markers/academicMarkers/symbol-divide.svg", + "hidden": false + }, + { + "id": "symbol-equality", + "name": "symbol-equality", + "asset": "/icons/xmind/markers/academicMarkers/symbol-equality.svg", + "hidden": false + }, + { + "id": "symbol-right", + "name": "正确", + "asset": "/icons/xmind/markers/academicMarkers/symbol-right.svg", + "hidden": false + }, + { + "id": "symbol-code", + "name": "symbol-code", + "asset": "/icons/xmind/markers/academicMarkers/symbol-code.svg", + "hidden": false + }, + { + "id": "symbol-not-equality", + "name": "symbol-not-equality", + "asset": "/icons/xmind/markers/academicMarkers/symbol-not-equality.svg", + "hidden": false + } + ] + }, + { + "id": "socialMarkers", + "label": "社交", + "hidden": true, + "markers": [ + { + "id": "c_symbol_broken_heart", + "name": "c_symbol_broken_heart", + "asset": "/icons/xmind/markers/socialMarkers/c_symbol_broken_heart.svg", + "hidden": false + }, + { + "id": "c_symbol_contact", + "name": "c_symbol_contact", + "asset": "/icons/xmind/markers/socialMarkers/c_symbol_contact.svg", + "hidden": false + }, + { + "id": "symbol-no-entry", + "name": "symbol-no-entry", + "asset": "/icons/xmind/markers/socialMarkers/symbol-no-entry.svg", + "hidden": false + }, + { + "id": "symbol-notice", + "name": "symbol-notice", + "asset": "/icons/xmind/markers/socialMarkers/symbol-notice.svg", + "hidden": false + }, + { + "id": "symbol-rss", + "name": "symbol-rss", + "asset": "/icons/xmind/markers/socialMarkers/symbol-rss.svg", + "hidden": false + }, + { + "id": "symbol_forward", + "name": "symbol_forward", + "asset": "/icons/xmind/markers/socialMarkers/symbol_forward.svg", + "hidden": false + }, + { + "id": "symbol-share", + "name": "symbol-share", + "asset": "/icons/xmind/markers/socialMarkers/symbol-share.svg", + "hidden": false + }, + { + "id": "symbol-comment", + "name": "symbol-comment", + "asset": "/icons/xmind/markers/socialMarkers/symbol-comment.svg", + "hidden": false + } + ] + }, + { + "id": "celebrationMarkers", + "label": "庆祝", + "hidden": true, + "markers": [ + { + "id": "celebration-ribbon", + "name": "celebration-ribbon", + "asset": "/icons/xmind/markers/celebrationMarkers/celebration-ribbon.svg", + "hidden": true + }, + { + "id": "celebration-clap", + "name": "celebration-clap", + "asset": "/icons/xmind/markers/celebrationMarkers/celebration-clap.svg", + "hidden": true + }, + { + "id": "celebration-100", + "name": "celebration-100", + "asset": "/icons/xmind/markers/celebrationMarkers/celebration-100.svg", + "hidden": true + }, + { + "id": "celebration-birthday", + "name": "celebration-birthday", + "asset": "/icons/xmind/markers/celebrationMarkers/celebration-birthday.svg", + "hidden": true + }, + { + "id": "celebration-king", + "name": "celebration-king", + "asset": "/icons/xmind/markers/celebrationMarkers/celebration-king.svg", + "hidden": true + }, + { + "id": "celebration-cheers", + "name": "celebration-cheers", + "asset": "/icons/xmind/markers/celebrationMarkers/celebration-cheers.svg", + "hidden": true + }, + { + "id": "celebration-boom", + "name": "celebration-boom", + "asset": "/icons/xmind/markers/celebrationMarkers/celebration-boom.svg", + "hidden": true + }, + { + "id": "celebration-kiss", + "name": "celebration-kiss", + "asset": "/icons/xmind/markers/celebrationMarkers/celebration-kiss.svg", + "hidden": true + }, + { + "id": "celebration-five", + "name": "celebration-five", + "asset": "/icons/xmind/markers/celebrationMarkers/celebration-five.svg", + "hidden": true + } + ] + }, + { + "id": "monthMarkers", + "label": "月份", + "hidden": true, + "markers": [ + { + "id": "month-jan", + "name": "month-jan", + "asset": "/icons/xmind/markers/monthMarkers/month-jan.svg", + "hidden": false + }, + { + "id": "month-feb", + "name": "month-feb", + "asset": "/icons/xmind/markers/monthMarkers/month-feb.svg", + "hidden": false + }, + { + "id": "month-mar", + "name": "month-mar", + "asset": "/icons/xmind/markers/monthMarkers/month-mar.svg", + "hidden": false + }, + { + "id": "month-apr", + "name": "month-apr", + "asset": "/icons/xmind/markers/monthMarkers/month-apr.svg", + "hidden": false + }, + { + "id": "month-may", + "name": "month-may", + "asset": "/icons/xmind/markers/monthMarkers/month-may.svg", + "hidden": false + }, + { + "id": "month-jun", + "name": "month-jun", + "asset": "/icons/xmind/markers/monthMarkers/month-jun.svg", + "hidden": false + }, + { + "id": "month-jul", + "name": "month-jul", + "asset": "/icons/xmind/markers/monthMarkers/month-jul.svg", + "hidden": false + }, + { + "id": "month-aug", + "name": "month-aug", + "asset": "/icons/xmind/markers/monthMarkers/month-aug.svg", + "hidden": false + }, + { + "id": "month-sep", + "name": "month-sep", + "asset": "/icons/xmind/markers/monthMarkers/month-sep.svg", + "hidden": false + }, + { + "id": "month-oct", + "name": "month-oct", + "asset": "/icons/xmind/markers/monthMarkers/month-oct.svg", + "hidden": false + }, + { + "id": "month-nov", + "name": "month-nov", + "asset": "/icons/xmind/markers/monthMarkers/month-nov.svg", + "hidden": false + }, + { + "id": "month-dec", + "name": "month-dec", + "asset": "/icons/xmind/markers/monthMarkers/month-dec.svg", + "hidden": false + } + ] + }, + { + "id": "weekMarkers", + "label": "星期", + "hidden": true, + "markers": [ + { + "id": "week-sun", + "name": "week-sun", + "asset": "/icons/xmind/markers/weekMarkers/week-sun.svg", + "hidden": false + }, + { + "id": "week-mon", + "name": "week-mon", + "asset": "/icons/xmind/markers/weekMarkers/week-mon.svg", + "hidden": false + }, + { + "id": "week-tue", + "name": "week-tue", + "asset": "/icons/xmind/markers/weekMarkers/week-tue.svg", + "hidden": false + }, + { + "id": "week-wed", + "name": "week-wed", + "asset": "/icons/xmind/markers/weekMarkers/week-wed.svg", + "hidden": false + }, + { + "id": "week-thu", + "name": "week-thu", + "asset": "/icons/xmind/markers/weekMarkers/week-thu.svg", + "hidden": false + }, + { + "id": "week-fri", + "name": "week-fri", + "asset": "/icons/xmind/markers/weekMarkers/week-fri.svg", + "hidden": false + }, + { + "id": "week-sat", + "name": "week-sat", + "asset": "/icons/xmind/markers/weekMarkers/week-sat.svg", + "hidden": false + } + ] + }, + { + "id": "halfStarMarkers", + "label": "半星", + "hidden": true, + "markers": [ + { + "id": "half-star-green", + "name": "half-star-green", + "asset": "/icons/xmind/markers/halfStarMarkers/half-star-green.png", + "hidden": true + }, + { + "id": "half-star-red", + "name": "half-star-red", + "asset": "/icons/xmind/markers/halfStarMarkers/half-star-red.png", + "hidden": true + }, + { + "id": "half-star-yellow", + "name": "half-star-yellow", + "asset": "/icons/xmind/markers/halfStarMarkers/half-star-yellow.png", + "hidden": true + }, + { + "id": "half-star-purple", + "name": "half-star-purple", + "asset": "/icons/xmind/markers/halfStarMarkers/half-star-purple.png", + "hidden": true + }, + { + "id": "half-star-blue", + "name": "half-star-blue", + "asset": "/icons/xmind/markers/halfStarMarkers/half-star-blue.png", + "hidden": true + }, + { + "id": "half-star-gray", + "name": "half-star-gray", + "asset": "/icons/xmind/markers/halfStarMarkers/half-star-gray.png", + "hidden": true + } + ] + }, + { + "id": "otherMarkers", + "label": "其他", + "hidden": true, + "markers": [ + { + "id": "other-calendar", + "name": "other-calendar", + "asset": "/icons/xmind/markers/otherMarkers/other-calendar.png", + "hidden": true + }, + { + "id": "other-email", + "name": "other-email", + "asset": "/icons/xmind/markers/otherMarkers/other-email.png", + "hidden": true + }, + { + "id": "other-phone", + "name": "other-phone", + "asset": "/icons/xmind/markers/otherMarkers/other-phone.png", + "hidden": true + }, + { + "id": "other-phone2", + "name": "other-phone2", + "asset": "/icons/xmind/markers/otherMarkers/other-phone2.png", + "hidden": true + }, + { + "id": "other-fax", + "name": "other-fax", + "asset": "/icons/xmind/markers/otherMarkers/other-fax.png", + "hidden": true + }, + { + "id": "other-people", + "name": "other-people", + "asset": "/icons/xmind/markers/otherMarkers/other-people.png", + "hidden": true + }, + { + "id": "other-people2", + "name": "other-people2", + "asset": "/icons/xmind/markers/otherMarkers/other-people2.png", + "hidden": true + }, + { + "id": "other-clock", + "name": "other-clock", + "asset": "/icons/xmind/markers/otherMarkers/other-clock.png", + "hidden": true + }, + { + "id": "other-coffee-cup", + "name": "other-coffee-cup", + "asset": "/icons/xmind/markers/otherMarkers/other-coffee-cup.png", + "hidden": true + }, + { + "id": "other-question", + "name": "other-question", + "asset": "/icons/xmind/markers/otherMarkers/other-question.svg", + "hidden": true + }, + { + "id": "other-exclam", + "name": "other-exclam", + "asset": "/icons/xmind/markers/otherMarkers/other-exclam.svg", + "hidden": true + }, + { + "id": "other-lightbulb", + "name": "other-lightbulb", + "asset": "/icons/xmind/markers/otherMarkers/other-lightbulb.png", + "hidden": true + }, + { + "id": "other-businesscard", + "name": "other-businesscard", + "asset": "/icons/xmind/markers/otherMarkers/other-businesscard.png", + "hidden": true + }, + { + "id": "other-social", + "name": "other-social", + "asset": "/icons/xmind/markers/otherMarkers/other-social.png", + "hidden": true + }, + { + "id": "other-chat", + "name": "other-chat", + "asset": "/icons/xmind/markers/otherMarkers/other-chat.png", + "hidden": true + }, + { + "id": "other-note", + "name": "other-note", + "asset": "/icons/xmind/markers/otherMarkers/other-note.png", + "hidden": true + }, + { + "id": "other-lock", + "name": "other-lock", + "asset": "/icons/xmind/markers/otherMarkers/other-lock.png", + "hidden": true + }, + { + "id": "other-unlock", + "name": "other-unlock", + "asset": "/icons/xmind/markers/otherMarkers/other-unlock.png", + "hidden": true + }, + { + "id": "other-yes", + "name": "other-yes", + "asset": "/icons/xmind/markers/otherMarkers/other-yes.svg", + "hidden": true + }, + { + "id": "other-no", + "name": "other-no", + "asset": "/icons/xmind/markers/otherMarkers/other-no.svg", + "hidden": true + }, + { + "id": "other-bomb", + "name": "other-bomb", + "asset": "/icons/xmind/markers/otherMarkers/other-bomb.png", + "hidden": true + }, + { + "id": "symbol-info", + "name": "symbol-info", + "asset": "/icons/xmind/markers/otherMarkers/symbol-info.svg", + "hidden": true + }, + { + "id": "c_symbol_line_graph", + "name": "c_symbol_line_graph", + "asset": "/icons/xmind/markers/otherMarkers/c_symbol_line_graph.svg", + "hidden": true + }, + { + "id": "c_symbol_shopping_cart", + "name": "c_symbol_shopping_cart", + "asset": "/icons/xmind/markers/otherMarkers/c_symbol_shopping_cart.svg", + "hidden": true + }, + { + "id": "c_symbol_medals", + "name": "c_symbol_medals", + "asset": "/icons/xmind/markers/otherMarkers/c_symbol_medals.svg", + "hidden": true + }, + { + "id": "c_symbol_trophy", + "name": "c_symbol_trophy", + "asset": "/icons/xmind/markers/otherMarkers/c_symbol_trophy.svg", + "hidden": true + }, + { + "id": "symbol-image", + "name": "symbol-image", + "asset": "/icons/xmind/markers/otherMarkers/symbol-image.svg", + "hidden": true + }, + { + "id": "c_symbol_exercise", + "name": "c_symbol_exercise", + "asset": "/icons/xmind/markers/otherMarkers/c_symbol_exercise.svg", + "hidden": true + }, + { + "id": "c_simbol-plus", + "name": "c_simbol-plus", + "asset": "/icons/xmind/markers/otherMarkers/c_simbol-plus.svg", + "hidden": true + }, + { + "id": "c_simbol-minus", + "name": "c_simbol-minus", + "asset": "/icons/xmind/markers/otherMarkers/c_simbol-minus.svg", + "hidden": true + }, + { + "id": "c_simbol-question", + "name": "c_simbol-question", + "asset": "/icons/xmind/markers/otherMarkers/c_simbol-question.svg", + "hidden": true + }, + { + "id": "c_simbol-info", + "name": "c_simbol-info", + "asset": "/icons/xmind/markers/otherMarkers/c_simbol-info.svg", + "hidden": true + }, + { + "id": "c_simbol-wrong", + "name": "c_simbol-wrong", + "asset": "/icons/xmind/markers/otherMarkers/c_simbol-wrong.svg", + "hidden": true + }, + { + "id": "c_simbol-right", + "name": "c_simbol-right", + "asset": "/icons/xmind/markers/otherMarkers/c_simbol-right.svg", + "hidden": true + }, + { + "id": "c_simbol-pause", + "name": "c_simbol-pause", + "asset": "/icons/xmind/markers/otherMarkers/c_simbol-pause.svg", + "hidden": true + }, + { + "id": "c_symbol_thermometer", + "name": "c_symbol_thermometer", + "asset": "/icons/xmind/markers/otherMarkers/c_symbol_thermometer.svg", + "hidden": true + } + ] + } +] diff --git a/lib/flow-board/xmind-markers.ts b/lib/flow-board/xmind-markers.ts new file mode 100644 index 000000000..33c694a6c --- /dev/null +++ b/lib/flow-board/xmind-markers.ts @@ -0,0 +1,42 @@ +import catalog from "./xmind-marker-catalog.json" with { type: "json" }; + +export type XmindMarker = { id: string; name: string; asset: string; hidden: boolean }; +export type XmindMarkerGroup = { id: string; label: string; hidden: boolean; markers: XmindMarker[] }; +export const XMIND_MARKER_GROUPS: XmindMarkerGroup[] = catalog; +// The client resolves shared IDs to their first catalog entry. +const markers = new Map(); +for (const group of catalog) { + for (const marker of group.markers) { + if (!markers.has(marker.id)) markers.set(marker.id, { ...marker, groupId: group.id }); + } +} +const aliases: Record = { + "🔴": "tag-red", "🟠": "tag-orange", "🟡": "tag-yellow", "🟢": "tag-green", "🔵": "tag-blue", "🟣": "tag-dark-purple", "⚪": "tag-grey", + "✅": "task-done", "▶️": "task-start", "◔": "task-quarter", "◑": "task-half", "◕": "task-3quar", "🚧": "task-5oct", + "🚩": "flag-red", "⭐": "star-red", "🌟": "star-yellow", "👤": "people-blue", + "❗": "c_simbol-exclam", "❓": "c_simbol-question", "💡": "symbol-idea", "❤️": "c_symbol_heart", "⚡": "symbol-lightning", "📌": "symbol-pin", + ...Object.fromEntries(Array.from({ length: 9 }, (_, index) => [`${index + 1}️⃣`, `priority-${index + 1}`])), +}; + +export function getXmindMarker(name: string) { + return markers.get(name.startsWith("xmind:") ? name.slice(6) : aliases[name] || name); +} + +export function xmindMarkerName(id: string) { + return `xmind:${id}`; +} + +export function getXmindMarkerIds(emojis: { name: string }[] = []) { + return [...new Set(emojis.flatMap(emoji => { + const marker = getXmindMarker(emoji.name); + return marker ? [marker.id] : []; + }))]; +} + +/** Native markers are mutually exclusive within each group. Unrelated emoji stay intact. */ +export function toggleXmindMarker(emojis: { name: string }[], markerId: string, remove: boolean) { + const marker = getXmindMarker(markerId); + if (!marker) return emojis; + const remaining = emojis.filter(emoji => getXmindMarker(emoji.name)?.groupId !== marker.groupId); + return remove ? remaining : [...remaining, { name: xmindMarkerName(markerId) }]; +} diff --git a/public/icons/xmind/README.md b/public/icons/xmind/README.md index e011d83cf..327effa1f 100644 --- a/public/icons/xmind/README.md +++ b/public/icons/xmind/README.md @@ -14,3 +14,5 @@ | summary.svg | `1b1744acc95b53aca30c45263701a6b614784759d146bd0ad57bd99aff1c1ccc` | | topic.svg | `011c9c671caa4a936210d408aa0d28b992eb69f42599edba1c2ab099e32ee683` | | zen.svg | `03537495a95775356831ffd43ad3c29c63d9113f577eba70213110049a88c83e` | + +2026-10-05 新增客户端标记入口 `marker.svg`,SHA-256:`48e5cef2dd2e2a1320a832e110f6a20f145f4ac915b046f7f61023af565442d3`。完整标记资源及校验清单见 [标记资源](./markers/README.md)。 diff --git a/public/icons/xmind/marker.svg b/public/icons/xmind/marker.svg new file mode 100644 index 000000000..cf2cc550c --- /dev/null +++ b/public/icons/xmind/marker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons/xmind/markers/README.md b/public/icons/xmind/markers/README.md new file mode 100644 index 000000000..44b576381 --- /dev/null +++ b/public/icons/xmind/markers/README.md @@ -0,0 +1,3 @@ +# Xmind 标记资源 + +来自用户已安装的 Xmind 26.04.01337 `Contents/Resources/app.asar` 中 `/static/snowbird/resource/markers/`,按客户端标记目录提取。目录顺序及隐藏状态来自 `renderer/9834.js`;完整第三方代码保留在临时目录。客户端默认显示 7 组 58 个标记;其余资源用于旧文档显示和更多标记。文件哈希见 `manifest.json`。 diff --git a/public/icons/xmind/markers/academicMarkers/c_symbol_apostrophe.svg b/public/icons/xmind/markers/academicMarkers/c_symbol_apostrophe.svg new file mode 100644 index 000000000..5ecdfb265 --- /dev/null +++ b/public/icons/xmind/markers/academicMarkers/c_symbol_apostrophe.svg @@ -0,0 +1,28 @@ + + + + symbol_apostrophe + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/academicMarkers/c_symbol_quote.svg b/public/icons/xmind/markers/academicMarkers/c_symbol_quote.svg new file mode 100644 index 000000000..0904e98a3 --- /dev/null +++ b/public/icons/xmind/markers/academicMarkers/c_symbol_quote.svg @@ -0,0 +1,22 @@ + + + + symbol_quote@16 + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/academicMarkers/symbol-about.svg b/public/icons/xmind/markers/academicMarkers/symbol-about.svg new file mode 100644 index 000000000..5b88d6cc8 --- /dev/null +++ b/public/icons/xmind/markers/academicMarkers/symbol-about.svg @@ -0,0 +1,24 @@ + + + + symbol_about@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/academicMarkers/symbol-attention.svg b/public/icons/xmind/markers/academicMarkers/symbol-attention.svg new file mode 100644 index 000000000..bbadb95fc --- /dev/null +++ b/public/icons/xmind/markers/academicMarkers/symbol-attention.svg @@ -0,0 +1,27 @@ + + + + symbol_attention@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/academicMarkers/symbol-code.svg b/public/icons/xmind/markers/academicMarkers/symbol-code.svg new file mode 100644 index 000000000..faac85fb5 --- /dev/null +++ b/public/icons/xmind/markers/academicMarkers/symbol-code.svg @@ -0,0 +1,23 @@ + + + + symbol_code@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/academicMarkers/symbol-divide.svg b/public/icons/xmind/markers/academicMarkers/symbol-divide.svg new file mode 100644 index 000000000..5b0be3493 --- /dev/null +++ b/public/icons/xmind/markers/academicMarkers/symbol-divide.svg @@ -0,0 +1,28 @@ + + + + symbol_divide@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/academicMarkers/symbol-equality.svg b/public/icons/xmind/markers/academicMarkers/symbol-equality.svg new file mode 100644 index 000000000..611dad454 --- /dev/null +++ b/public/icons/xmind/markers/academicMarkers/symbol-equality.svg @@ -0,0 +1,27 @@ + + + + symbol_equality@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/academicMarkers/symbol-minus.svg b/public/icons/xmind/markers/academicMarkers/symbol-minus.svg new file mode 100644 index 000000000..3939cf4b1 --- /dev/null +++ b/public/icons/xmind/markers/academicMarkers/symbol-minus.svg @@ -0,0 +1,26 @@ + + + + symbol_minus@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/academicMarkers/symbol-not-equality.svg b/public/icons/xmind/markers/academicMarkers/symbol-not-equality.svg new file mode 100644 index 000000000..ab241021d --- /dev/null +++ b/public/icons/xmind/markers/academicMarkers/symbol-not-equality.svg @@ -0,0 +1,23 @@ + + + + symbol_not_equality@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/academicMarkers/symbol-pause.svg b/public/icons/xmind/markers/academicMarkers/symbol-pause.svg new file mode 100644 index 000000000..858307e6e --- /dev/null +++ b/public/icons/xmind/markers/academicMarkers/symbol-pause.svg @@ -0,0 +1,27 @@ + + + + symbol_pause@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/academicMarkers/symbol-plus.svg b/public/icons/xmind/markers/academicMarkers/symbol-plus.svg new file mode 100644 index 000000000..c0a3953fd --- /dev/null +++ b/public/icons/xmind/markers/academicMarkers/symbol-plus.svg @@ -0,0 +1,21 @@ + + + + symbol_plus@16 + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/academicMarkers/symbol-question.svg b/public/icons/xmind/markers/academicMarkers/symbol-question.svg new file mode 100644 index 000000000..37f19ef65 --- /dev/null +++ b/public/icons/xmind/markers/academicMarkers/symbol-question.svg @@ -0,0 +1,27 @@ + + + + symbol_question@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/academicMarkers/symbol-right.svg b/public/icons/xmind/markers/academicMarkers/symbol-right.svg new file mode 100644 index 000000000..847bda337 --- /dev/null +++ b/public/icons/xmind/markers/academicMarkers/symbol-right.svg @@ -0,0 +1,21 @@ + + + + symbol_right@16 + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/academicMarkers/symbol-wrong.svg b/public/icons/xmind/markers/academicMarkers/symbol-wrong.svg new file mode 100644 index 000000000..411244248 --- /dev/null +++ b/public/icons/xmind/markers/academicMarkers/symbol-wrong.svg @@ -0,0 +1,21 @@ + + + + symbol_wrong@16 + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/arrowMarkers/arrow-down-left.svg b/public/icons/xmind/markers/arrowMarkers/arrow-down-left.svg new file mode 100644 index 000000000..381c377e2 --- /dev/null +++ b/public/icons/xmind/markers/arrowMarkers/arrow-down-left.svg @@ -0,0 +1,17 @@ + + + + arr_dl + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/arrowMarkers/arrow-down-right.svg b/public/icons/xmind/markers/arrowMarkers/arrow-down-right.svg new file mode 100644 index 000000000..f12a33c48 --- /dev/null +++ b/public/icons/xmind/markers/arrowMarkers/arrow-down-right.svg @@ -0,0 +1,17 @@ + + + + arr_dr + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/arrowMarkers/arrow-down.svg b/public/icons/xmind/markers/arrowMarkers/arrow-down.svg new file mode 100644 index 000000000..5a66526f2 --- /dev/null +++ b/public/icons/xmind/markers/arrowMarkers/arrow-down.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/icons/xmind/markers/arrowMarkers/arrow-left-right.svg b/public/icons/xmind/markers/arrowMarkers/arrow-left-right.svg new file mode 100644 index 000000000..1be3ee938 --- /dev/null +++ b/public/icons/xmind/markers/arrowMarkers/arrow-left-right.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/icons/xmind/markers/arrowMarkers/arrow-left.svg b/public/icons/xmind/markers/arrowMarkers/arrow-left.svg new file mode 100644 index 000000000..6612f9630 --- /dev/null +++ b/public/icons/xmind/markers/arrowMarkers/arrow-left.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/icons/xmind/markers/arrowMarkers/arrow-refresh.svg b/public/icons/xmind/markers/arrowMarkers/arrow-refresh.svg new file mode 100644 index 000000000..3f50e99e3 --- /dev/null +++ b/public/icons/xmind/markers/arrowMarkers/arrow-refresh.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/icons/xmind/markers/arrowMarkers/arrow-right.svg b/public/icons/xmind/markers/arrowMarkers/arrow-right.svg new file mode 100644 index 000000000..c5f376b8e --- /dev/null +++ b/public/icons/xmind/markers/arrowMarkers/arrow-right.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/icons/xmind/markers/arrowMarkers/arrow-up-down.svg b/public/icons/xmind/markers/arrowMarkers/arrow-up-down.svg new file mode 100644 index 000000000..653de173c --- /dev/null +++ b/public/icons/xmind/markers/arrowMarkers/arrow-up-down.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/icons/xmind/markers/arrowMarkers/arrow-up-left.svg b/public/icons/xmind/markers/arrowMarkers/arrow-up-left.svg new file mode 100644 index 000000000..25961c0f7 --- /dev/null +++ b/public/icons/xmind/markers/arrowMarkers/arrow-up-left.svg @@ -0,0 +1,17 @@ + + + + arr_ul + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/arrowMarkers/arrow-up-right.svg b/public/icons/xmind/markers/arrowMarkers/arrow-up-right.svg new file mode 100644 index 000000000..80baa5906 --- /dev/null +++ b/public/icons/xmind/markers/arrowMarkers/arrow-up-right.svg @@ -0,0 +1,17 @@ + + + + arr_upr + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/arrowMarkers/arrow-up.svg b/public/icons/xmind/markers/arrowMarkers/arrow-up.svg new file mode 100644 index 000000000..4942a0901 --- /dev/null +++ b/public/icons/xmind/markers/arrowMarkers/arrow-up.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/icons/xmind/markers/celebrationMarkers/celebration-100.svg b/public/icons/xmind/markers/celebrationMarkers/celebration-100.svg new file mode 100644 index 000000000..ce2d963f8 --- /dev/null +++ b/public/icons/xmind/markers/celebrationMarkers/celebration-100.svg @@ -0,0 +1,30 @@ + + + + celebration_100 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/celebrationMarkers/celebration-birthday.svg b/public/icons/xmind/markers/celebrationMarkers/celebration-birthday.svg new file mode 100644 index 000000000..776ed3c48 --- /dev/null +++ b/public/icons/xmind/markers/celebrationMarkers/celebration-birthday.svg @@ -0,0 +1,24 @@ + + + + celebration_birthday + Created with Sketch. + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/celebrationMarkers/celebration-boom.svg b/public/icons/xmind/markers/celebrationMarkers/celebration-boom.svg new file mode 100644 index 000000000..b7d8bf406 --- /dev/null +++ b/public/icons/xmind/markers/celebrationMarkers/celebration-boom.svg @@ -0,0 +1,25 @@ + + + + celebration_boom + Created with Sketch. + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/celebrationMarkers/celebration-cheers.svg b/public/icons/xmind/markers/celebrationMarkers/celebration-cheers.svg new file mode 100644 index 000000000..cc71a80de --- /dev/null +++ b/public/icons/xmind/markers/celebrationMarkers/celebration-cheers.svg @@ -0,0 +1,27 @@ + + + + celebration_cheers + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/celebrationMarkers/celebration-clap.svg b/public/icons/xmind/markers/celebrationMarkers/celebration-clap.svg new file mode 100644 index 000000000..9c7f6236e --- /dev/null +++ b/public/icons/xmind/markers/celebrationMarkers/celebration-clap.svg @@ -0,0 +1,25 @@ + + + + celebration_clap + Created with Sketch. + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/celebrationMarkers/celebration-five.svg b/public/icons/xmind/markers/celebrationMarkers/celebration-five.svg new file mode 100644 index 000000000..12d658760 --- /dev/null +++ b/public/icons/xmind/markers/celebrationMarkers/celebration-five.svg @@ -0,0 +1,23 @@ + + + + celebration_five + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/celebrationMarkers/celebration-king.svg b/public/icons/xmind/markers/celebrationMarkers/celebration-king.svg new file mode 100644 index 000000000..f44000f6e --- /dev/null +++ b/public/icons/xmind/markers/celebrationMarkers/celebration-king.svg @@ -0,0 +1,25 @@ + + + + celebration_king + Created with Sketch. + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/celebrationMarkers/celebration-kiss.svg b/public/icons/xmind/markers/celebrationMarkers/celebration-kiss.svg new file mode 100644 index 000000000..4e775b474 --- /dev/null +++ b/public/icons/xmind/markers/celebrationMarkers/celebration-kiss.svg @@ -0,0 +1,23 @@ + + + + celebration_kiss + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/celebrationMarkers/celebration-ribbon.svg b/public/icons/xmind/markers/celebrationMarkers/celebration-ribbon.svg new file mode 100644 index 000000000..048aef7fc --- /dev/null +++ b/public/icons/xmind/markers/celebrationMarkers/celebration-ribbon.svg @@ -0,0 +1,26 @@ + + + + celebration_ribbon + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/flagMarkers/flag-blue.svg b/public/icons/xmind/markers/flagMarkers/flag-blue.svg new file mode 100644 index 000000000..5d34f33e2 --- /dev/null +++ b/public/icons/xmind/markers/flagMarkers/flag-blue.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/flagMarkers/flag-dark-blue.svg b/public/icons/xmind/markers/flagMarkers/flag-dark-blue.svg new file mode 100644 index 000000000..ad59332a3 --- /dev/null +++ b/public/icons/xmind/markers/flagMarkers/flag-dark-blue.svg @@ -0,0 +1,12 @@ + + + + flag_dark_blue@16 + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/flagMarkers/flag-dark-gray.svg b/public/icons/xmind/markers/flagMarkers/flag-dark-gray.svg new file mode 100644 index 000000000..e01748945 --- /dev/null +++ b/public/icons/xmind/markers/flagMarkers/flag-dark-gray.svg @@ -0,0 +1,21 @@ + + + + flags_bla + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/flagMarkers/flag-dark-green.svg b/public/icons/xmind/markers/flagMarkers/flag-dark-green.svg new file mode 100644 index 000000000..32bb70185 --- /dev/null +++ b/public/icons/xmind/markers/flagMarkers/flag-dark-green.svg @@ -0,0 +1,17 @@ + + + + flags_gra + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/flagMarkers/flag-gray.svg b/public/icons/xmind/markers/flagMarkers/flag-gray.svg new file mode 100644 index 000000000..9ae2ab098 --- /dev/null +++ b/public/icons/xmind/markers/flagMarkers/flag-gray.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/flagMarkers/flag-green.svg b/public/icons/xmind/markers/flagMarkers/flag-green.svg new file mode 100644 index 000000000..3c23f55c1 --- /dev/null +++ b/public/icons/xmind/markers/flagMarkers/flag-green.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/flagMarkers/flag-orange.svg b/public/icons/xmind/markers/flagMarkers/flag-orange.svg new file mode 100644 index 000000000..e71519137 --- /dev/null +++ b/public/icons/xmind/markers/flagMarkers/flag-orange.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/flagMarkers/flag-purple.svg b/public/icons/xmind/markers/flagMarkers/flag-purple.svg new file mode 100644 index 000000000..743234e6e --- /dev/null +++ b/public/icons/xmind/markers/flagMarkers/flag-purple.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/flagMarkers/flag-red.svg b/public/icons/xmind/markers/flagMarkers/flag-red.svg new file mode 100644 index 000000000..0f66b1ef9 --- /dev/null +++ b/public/icons/xmind/markers/flagMarkers/flag-red.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/flagMarkers/flag-yellow.svg b/public/icons/xmind/markers/flagMarkers/flag-yellow.svg new file mode 100644 index 000000000..9ea98a8e9 --- /dev/null +++ b/public/icons/xmind/markers/flagMarkers/flag-yellow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/halfStarMarkers/half-star-blue.png b/public/icons/xmind/markers/halfStarMarkers/half-star-blue.png new file mode 100644 index 000000000..ecb155a51 Binary files /dev/null and b/public/icons/xmind/markers/halfStarMarkers/half-star-blue.png differ diff --git a/public/icons/xmind/markers/halfStarMarkers/half-star-gray.png b/public/icons/xmind/markers/halfStarMarkers/half-star-gray.png new file mode 100644 index 000000000..64c2bcdfc Binary files /dev/null and b/public/icons/xmind/markers/halfStarMarkers/half-star-gray.png differ diff --git a/public/icons/xmind/markers/halfStarMarkers/half-star-green.png b/public/icons/xmind/markers/halfStarMarkers/half-star-green.png new file mode 100644 index 000000000..bcc50474f Binary files /dev/null and b/public/icons/xmind/markers/halfStarMarkers/half-star-green.png differ diff --git a/public/icons/xmind/markers/halfStarMarkers/half-star-purple.png b/public/icons/xmind/markers/halfStarMarkers/half-star-purple.png new file mode 100644 index 000000000..4ea75a3e9 Binary files /dev/null and b/public/icons/xmind/markers/halfStarMarkers/half-star-purple.png differ diff --git a/public/icons/xmind/markers/halfStarMarkers/half-star-red.png b/public/icons/xmind/markers/halfStarMarkers/half-star-red.png new file mode 100644 index 000000000..4d872f2dd Binary files /dev/null and b/public/icons/xmind/markers/halfStarMarkers/half-star-red.png differ diff --git a/public/icons/xmind/markers/halfStarMarkers/half-star-yellow.png b/public/icons/xmind/markers/halfStarMarkers/half-star-yellow.png new file mode 100644 index 000000000..d83704e12 Binary files /dev/null and b/public/icons/xmind/markers/halfStarMarkers/half-star-yellow.png differ diff --git a/public/icons/xmind/markers/manifest.json b/public/icons/xmind/markers/manifest.json new file mode 100644 index 000000000..c61270c67 --- /dev/null +++ b/public/icons/xmind/markers/manifest.json @@ -0,0 +1,221 @@ +{ + "markers/tagMarkers/tag-red.svg": "6f7417a2a8c32a0be0e6a2965a2b25eb87df8beca02b99db03787539009cb8b9", + "markers/tagMarkers/tag-orange.svg": "280fa3e5696527599b020ba3121f0b075395ae2882ef49b2276136f4a78bc3f7", + "markers/tagMarkers/tag-yellow.svg": "959821df6de278eeab9c68b073259a6b64e4083cb252d6390251b50b335320fb", + "markers/tagMarkers/tag-green.svg": "5f95c21c5b9ced0af75a58736b234d0366fb2573eedabc63ea98c9b9b24e0b82", + "markers/tagMarkers/tag-blue.svg": "289db98e41db0e26f60ed02c3d34685584567e5a9093310abb8634e71f87b7f7", + "markers/tagMarkers/tag-dark-purple.svg": "b98b8bd909b156f889de53bf9d96d5f2eabddbd66d874a3839b2e44d6803a035", + "markers/tagMarkers/tag-grey.svg": "7c2ba31eac64f6220a9dc4769e5b0aac441d33d4dc705792056aa2d236dddf7b", + "markers/tagMarkers/tag-dark-blue.svg": "edf2fd98b4083fdabe4dccbf7f43e9780853c890cc0f2c38a13085cd920abd9b", + "markers/priorityMarkers/priority-1.svg": "c9f7337534544467e8bad5762afe789374f6b9c2b0ce9621b7a00da4cf00b2c9", + "markers/priorityMarkers/priority-2.svg": "1540fe3dbf8f91005cddc19f2a4dc143f75eaf2beee7c746cc2aae1716d4ba1b", + "markers/priorityMarkers/priority-3.svg": "667d80042647aac8e038f5d3b50dcc71329282ee2fab3734f8ae993fce4d595f", + "markers/priorityMarkers/priority-4.svg": "87dc672fc05151214367367bb1974d3b7d3a42e563c766b32a36f4281ba37d90", + "markers/priorityMarkers/priority-5.svg": "6a68916ff723702b4e6af6d09c6fa8300c102c38c75bb1053d8c42d724a9d75e", + "markers/priorityMarkers/priority-6.svg": "c8992a1cc7a5b092d6cf4d56884cb07a79aec10c60e30914aa8495243ab7418a", + "markers/priorityMarkers/priority-7.svg": "74fee5e25707184be9a538c7c6049d16630efd5b55f4ea11677226dfc1c35aa0", + "markers/priorityMarkers/priority-8.svg": "62aeac2e0b5b60e81ebaeb3cff9de3f2596cc5a6dd15f4138ddff5550b8d4133", + "markers/priorityMarkers/priority-9.svg": "f9ec32b73499337001d03b7882cc64c85e4d278ddd35923715d2f77dd9168906", + "markers/smileyMarkers/smiley-laugh.svg": "6dbba77afcad60cf8b9e01bfbc2b79e044518505de436e5ea2cf91e4ac42e7de", + "markers/smileyMarkers/smiley-smile.svg": "3e0d02603b045d22d6ce8f37646e6aff747bf25a5dbb457d53e8594f60202d2c", + "markers/smileyMarkers/smiley-cry.svg": "bbff6f24383cee1d782973faff14419d1926309cce5372fccb226eaf427b47ea", + "markers/smileyMarkers/smiley-surprise.svg": "93419d96af3e2504597b10dafd6741a7de403843813b63f43059db96480862c2", + "markers/smileyMarkers/smiley-boring.svg": "bd5d489f151be588bebe99394bb49b7aa45faddae8adb779c9c395521210f587", + "markers/smileyMarkers/smiley-angry.svg": "1cc484ef834b558e0b02f5bd43a4d3ca38004ca7dcef38fcb85fd8ae23343c76", + "markers/smileyMarkers/smiley-embarrass.svg": "b4685ae2640d9097bd1df50b5e1b7c49aae961dfbd8702d8d0c6d355d34b0dd1", + "markers/smileyMarkers/smiley-think.svg": "984374ac780cc79065758dc9186b4094ac074860d4381e23c3d66eff5b4d4a52", + "markers/smileyMarkers/smiley-love.svg": "eecb81b23e1faf98e3e37f36325c18142035562b1bfd9bfbd4ffd8732a958991", + "markers/smileyMarkers/smiley-sad.svg": "6460b88062547af9ff7038cf1f0751bee8640ff03487046090e78ec40f11f27d", + "markers/smileyMarkers/smiley-cry-laugh.svg": "bc5703a680b58217a2863ec6bf0d19427cabb31fd5b5ebf733244e3ac7ce6bff", + "markers/smileyMarkers/smiley-adore.svg": "8bc64021ffcff03405c4366853b7d3c1875a186fb5e48a6b9a13f31789afe359", + "markers/smileyMarkers/smiley-devil.svg": "c942a0540fa2dccfd1a4cb1e2b60cdcb8946b0889455af46cc0562cd26b1add3", + "markers/smileyMarkers/smiley-upset.svg": "c980f09f4ab0391ecb7495116d3702e1c7f56649d544d9974c1f676b997115cd", + "markers/taskMarkers/task-start.svg": "094736aa8b424f65c45b57e98073621afe8410931731e907ed16de33c34dd358", + "markers/taskMarkers/task-oct.svg": "a034ce26fac6fb84a45f25cafc09cc8879a94aea01598b9f31b94923758a79ce", + "markers/taskMarkers/task-quarter.svg": "7c09825cd17539bdb65db0f6ea733cf8fda29b0dcb67f61f385743494402d545", + "markers/taskMarkers/task-3oct.svg": "31a77d1a198018c6a124766e1f443f3691d89b7131aac8f1619c77f5b4f007b0", + "markers/taskMarkers/task-half.svg": "91f9fab2fa21b7d33dc03d794691d89efdf27a7d66b093fb107766d4340bc8a2", + "markers/taskMarkers/task-5oct.svg": "e8f1925899b4e28f753a82be5ebe0bb2fb1fd57550434c5379976929c65666ec", + "markers/taskMarkers/task-3quar.svg": "398d65bdeeeefc5a59e785fa049d81928e48e0337db30951631075bd1ce9434c", + "markers/taskMarkers/task-7oct.svg": "13efc7197a1f9e77a31b41ca6483d21e847a78d495546492c35bef6e85768c03", + "markers/taskMarkers/task-done.svg": "98c549a3dbe662b641671a5127a0659b08882e5552cc69c95d2089a64fddaa07", + "markers/taskMarkers/task-pause.png": "c3834610718d3c9b8b168e17af62e51c6bd1cfeb759e3c5c999bb0753a8c0ac7", + "markers/flagMarkers/flag-red.svg": "b70f03acac8166aec1c034f2e310d8b0e48f8fb4f04669ed18375a4b1346227b", + "markers/flagMarkers/flag-orange.svg": "7b9c4127ecd3c6d3260164748386b931457eba02421cef129c8d0f6b0860bb25", + "markers/flagMarkers/flag-yellow.svg": "7110213c1c7a7980516335b9b109dcf51d0538214e24a87031698231daee4bf7", + "markers/flagMarkers/flag-green.svg": "b81e0bf9e7a88c9d7477413a16a0198c9800e6188e66d56f95bc488288dd99e0", + "markers/flagMarkers/flag-blue.svg": "dfa2bee5d694657db564b6b8c12c4c910f2de9c3f3105d07d2857ceec9843122", + "markers/flagMarkers/flag-purple.svg": "9f3752962216db8501fd443ddaedae503691145a431e2802bc19249e2bef85f4", + "markers/flagMarkers/flag-gray.svg": "2787dac3184b8a05cd69be0652f7f2e8748726da8a0e0eece5aacaf3906c1f17", + "markers/flagMarkers/flag-dark-blue.svg": "735799b54688fb95ba095f6cc8c0b1136be0e6fc8aacdadba60008db4e85d710", + "markers/flagMarkers/flag-dark-green.svg": "55cf35b3eb5436466340e3942c7ef03640c5a9dc39d79c36b798947e28894baf", + "markers/flagMarkers/flag-dark-gray.svg": "454fa1eafd24761629278cfbf9260f4fe5f7ae23cbf0b00dc2ff6e50b3d9592c", + "markers/starMarkers/star-red.svg": "b14c885e5495d46c6b3c727880f3e2536a015fe2a73071b42a7e00f4c0cff1b1", + "markers/starMarkers/star-orange.svg": "ebb19e62192eada3c6183f4eed87f5fe76e32664cad53a799d6a68a92e5d69aa", + "markers/starMarkers/star-yellow.svg": "6c153f50741ac1dada725580ed596c9cf716b8d501d4511f45cccc6b4c11214f", + "markers/starMarkers/star-green.svg": "59b195425e000784c08bc4d7dc0fc2d52f6e684ff725a95e9a7c83ac46111de2", + "markers/starMarkers/star-blue.svg": "d5d31f42a44d2a9bf4ed21989260a1f624979c91674c32ea5447a1ed295348b0", + "markers/starMarkers/star-purple.svg": "1810bfe05f2aacfb80d4f7c4ba0b61951e28a045ef1ff3a0815770c3befa69dd", + "markers/starMarkers/star-gray.svg": "004b51420f2f0977361602f7539a64d99bf4378983e85268adce56b2f2fb0b93", + "markers/starMarkers/star-dark-blue.svg": "0e4a578151a11779749c2ec9841fbda9ad6e04b3dc51d399e28ad85954e11b7b", + "markers/starMarkers/star-dark-green.svg": "7a32e1b0b5c701ea6b1f5f18df80ac7b9e02737cca335a3a0098b9d50bc9304e", + "markers/starMarkers/star-dark-gray.svg": "921f2d68a09dce91e02a35f5bf60f9d8a06ff4add4646397abeed7472c1c3de7", + "markers/peopleMarkers/people-red.svg": "6d5cb0869d7b1d1d70830045b63343c18f1c16e51990cb033caad6febbf7b77e", + "markers/peopleMarkers/people-orange.svg": "7ff0853f27998712bde9ef3804d6a1ca1f6133f0c62108c42997d31739791a6c", + "markers/peopleMarkers/people-yellow.svg": "0c4dfc6f8f4e8f4755446277d72eb83628986a17bc94b06d8044728183fd4a3b", + "markers/peopleMarkers/people-green.svg": "b0c9f20afd2943e897e4546edf9be9615d2a414bd3f9cf7d3bd309812eb04508", + "markers/peopleMarkers/people-blue.svg": "886155407c0b6ccc2498418fb8b652d48107b234b120259d7ba2ebddcee82e4e", + "markers/peopleMarkers/people-purple.svg": "4ed5a5669228a8b149ab08c63fe5f9f3738f047f9692927aa66c584075499801", + "markers/peopleMarkers/people-gray.svg": "f844578ada4964a66bbce67a9de5b818cab5b04c5f6b7143dc12934aae25ab31", + "markers/peopleMarkers/people-dark-blue.svg": "c2d8cca1e26ab421ca73f6970fec0d743ddddb96fec31185b9b6f0b1ddf9db06", + "markers/peopleMarkers/people-dark-green.svg": "aefb89f52dd29d7a941524b5a3ad9129a5a6e09dad818164b409f2590b84c2b7", + "markers/peopleMarkers/people-dark-gray.svg": "da1e71188e615740aeec77b6f553955ee4912e1e81f5426c4ec02c1f8e3ee290", + "markers/arrowMarkers/arrow-left.svg": "fbcb5d93f3a51d70d6c4cc1ea4b1ee26804a05d04acb4dfbb0daa7198dd4ba14", + "markers/arrowMarkers/arrow-right.svg": "87ea74d3ddf9a57a62b67235a95386aebc1de0c8e31a7d61d442433daee60aa7", + "markers/arrowMarkers/arrow-up.svg": "0dd447bb9717c7ff83ba5020ad0b0ce50d71c90e207c5b5ca5a33acb2847b8ef", + "markers/arrowMarkers/arrow-down.svg": "3a833f5749e800ae5c9bd7ec96f2511e20fac3b60e2c44cd777fb0dd4bd19f5c", + "markers/arrowMarkers/arrow-left-right.svg": "730da5d814aa5498b2afa1d6c9fef32fe736a0e866027d95135192969da25a1c", + "markers/arrowMarkers/arrow-up-down.svg": "32b52c31184a1e8cb1a89cbb96f2487882f36b65d4f1f2ee0e8c51db954b9cd9", + "markers/arrowMarkers/arrow-refresh.svg": "9d46a3815dfa0fc789b06bf6bd450826ebd8bc0d9148f3c0f31da7dfb7763b07", + "markers/arrowMarkers/arrow-up-right.svg": "1e6587222ac1783d0a0d70d5fed9faeb6f37b4371b498b9c1adb1ab4e0ceb237", + "markers/arrowMarkers/arrow-down-right.svg": "86d2133619bc95f67d652aa9b977b6a21c8e6908dd676c851be4d449fc7c9091", + "markers/arrowMarkers/arrow-down-left.svg": "b7bf9f97bdefe1c2d24ab102b98995acd6b1ee4cf66890427df54c2f42a79c53", + "markers/arrowMarkers/arrow-up-left.svg": "df29f112789e8edfece987e1eb70805699de3c0b9aff9ee4349b1f2dc66d7067", + "markers/academicMarkers/c_symbol_quote.svg": "f5f861fd537f298d517ef5aa035e6f7dbfd75bfa3b0b57fc6e92efeaa81c4611", + "markers/academicMarkers/c_symbol_apostrophe.svg": "26c84cd7fc9ac7f1c7de89c0106627e2db16ea9e13930089712802694a0cb055", + "markers/academicMarkers/symbol-question.svg": "c9ee628aaf67926576ff55884359ece669fd7ffab0ff7bd1fdd5b95869dbb652", + "markers/academicMarkers/symbol-attention.svg": "0ebdbde57686dae61d292bc430d129a917380f798bf56a897953531556af1a8a", + "markers/academicMarkers/symbol-pause.svg": "0d79c7cdd6402f9789e9d68ce83bbd532e7c0d3d5b664023b9d14118b4080d05", + "markers/academicMarkers/symbol-wrong.svg": "06a92a21e4aa890b16f3d4ada3874d1afdc6da83e832eabc85d8c678fb4db980", + "markers/academicMarkers/symbol-about.svg": "6987ed661f878a8dfc8c4c9feadae7e6d1248a3c2b2e0752a0338b9556c3d197", + "markers/academicMarkers/symbol-plus.svg": "cf742985186eae01e267378c35863af1ef8c9735f1b9be80b5afd2b6dcba8230", + "markers/academicMarkers/symbol-minus.svg": "197726b006288a010867b088156959e5a6a00d4f8ca9d94aae611021e56b08a8", + "markers/academicMarkers/symbol-divide.svg": "2c6d3e61495571b248475de125ce563f4d9b48f4e7c51a204b8d39ce157cd41f", + "markers/academicMarkers/symbol-equality.svg": "25973929c14550feb0a88ae3eed8f763bf27016ed8797c24491db6def707abf5", + "markers/academicMarkers/symbol-right.svg": "5ff8262467c5dd9c49ab3159323efbc0c82455f9c2e2be6dc2aa4ee8fac65483", + "markers/academicMarkers/symbol-code.svg": "031d0d90baa30d77ae99e804a358c388353be9663574b148d094c0b88b31d315", + "markers/academicMarkers/symbol-not-equality.svg": "b8b6f8f8773dd8340039ee8301c402f7f79ec222dea30b7813cfc4830e28b3ec", + "markers/socialMarkers/c_symbol_broken_heart.svg": "ef8b30ccd065603ec9a94dfec9a560037dd35034b32a6a99d79bf4c36d3813de", + "markers/socialMarkers/c_symbol_contact.svg": "d4e991247970d40c1e0013b47544e44f78a5ad9717e8d0778bd0fc497f5c80f4", + "markers/socialMarkers/symbol-no-entry.svg": "a042417a30d542fb9341a3896933e53e12618c855ce3e824b162c6a4e8bc1524", + "markers/socialMarkers/symbol-notice.svg": "77adc2e9db5a8eef8b6e6ac5d5b2af7a9d61275c3960455cf7d8ecefee219df4", + "markers/socialMarkers/symbol-rss.svg": "fe6f9e9e08ab3cd0ab3e074449c09b04119a8187b91568d7b10b3c8e99a1f24c", + "markers/socialMarkers/symbol_forward.svg": "dc2c7c897c00683ce52e1eb45d4733d6d397a92ad58c05480e409e2bdb83f105", + "markers/socialMarkers/symbol-share.svg": "8497b3bd8d06cae762f35fad696dd1b60b300b85ffdc76095ad737e4a9fe00a8", + "markers/socialMarkers/symbol-comment.svg": "359ec56e9c262d828a45b9c988623409045e764333d00038777d03ecc811dfc9", + "markers/celebrationMarkers/celebration-ribbon.svg": "2494b88ac5dd7ddc8c968c5bcb894f53554fdd74f495d337c2739b362216e7f1", + "markers/celebrationMarkers/celebration-clap.svg": "9f26426cfe26bfb4810512a5be1a3cbdbd75cee7920f8943268689989e03118a", + "markers/celebrationMarkers/celebration-100.svg": "5a4b2a10498f3d791cbc1a7b40d4325ad0a94241c29477b68f97c4965675e756", + "markers/celebrationMarkers/celebration-birthday.svg": "f97ba33884c8e1598bc6fe56e0cefebe2051de8b46d1a64ea90ef2f5bf4f1390", + "markers/celebrationMarkers/celebration-king.svg": "ea4b7206c010430c5b2676f1d61dfcfde78aee35e84b5e62adfb2a0f14e4692a", + "markers/celebrationMarkers/celebration-cheers.svg": "b766fd428bf40915bd0ca31767ad79645d63edb7f45211152c3f496069472337", + "markers/celebrationMarkers/celebration-boom.svg": "ba0923713f1fce469c7fb682624b8d1e0e69a3854eee906562853855c535894e", + "markers/celebrationMarkers/celebration-kiss.svg": "32e2b9fe5ffde727a457c4e7f73d5168ad66a56423addea44296ba1c03b8b692", + "markers/celebrationMarkers/celebration-five.svg": "d8f009f710c6124528791d0af87ea6ad0e0d2f8bbb810fda2c51b5feb0738c2c", + "markers/symbolMarkers/c_symbol_heart.svg": "85db4e7cd08c81683a265e3332e22cea82474bf81e268d6d5d0c2138c871058a", + "markers/symbolMarkers/c_symbol_like.svg": "2d008060a4592715e6dd1b5168298dddb669b5624f71d616c18ea44654fac8a6", + "markers/symbolMarkers/c_symbol_dislike.svg": "3aa63a26f587b78d4f4381d2b4bd1dbe62ed930571f0740b31a24f6b2896d4a0", + "markers/symbolMarkers/symbol-pin.svg": "9b3d5360ab67f8230c074a207e7fe1060b80bf01f73a0291e4543fdb745ecf5a", + "markers/symbolMarkers/symbol-idea.svg": "350e13480841db6a3705bc4ab465cca81057d54bf34a3ca4876f2b8669d1355b", + "markers/symbolMarkers/symbol-lightning.svg": "31b6fb5e088d99ccf826231ac92dcf77b8a51dafbe299782444237e584b21283", + "markers/symbolMarkers/c_symbol_hourglass.svg": "e6d91b1428749c7f983b02dccadd454198937c62c4e700c8ba2dfaee151f9c6f", + "markers/symbolMarkers/c_symbol_telephone.svg": "26818af7de9196fef86678e6bf1ab83e74645e22f2b2d7cb90766744531d1e28", + "markers/symbolMarkers/c_symbol_pen.svg": "e85d879722ba0885ede26ce2a334c91ac0534b9688d89b8f2ba233a8acb9e67a", + "markers/symbolMarkers/c_symbol_music.svg": "3a57622f75c67eee251df42bba0039ba953c82b18ee03149d022eb736dedc61a", + "markers/symbolMarkers/symbol-entertainment.svg": "a2ecadbd9b3d5d65b71f12ac7ea3c6ac2c1bca3d4e565da41e479884c1ece726", + "markers/symbolMarkers/symbol-100.svg": "381a2a378c2a43df88fe2856b8f7c649488752b792393ef768c2b94752f42fd5", + "markers/symbolMarkers/c_symbol_flight.svg": "c267e08021457e53c6c43041abce34f9bcfd171f2f206c344b7215d7539df2b0", + "markers/symbolMarkers/symbol-run.svg": "0f6abdd81b7f1344ef19268cab20034aebf1c919f7cb63499f7ebc8ca7ec231c", + "markers/symbolMarkers/symbol-exclam.svg": "d747c3fd1307da8f9540e03b88bba50575a698c9312e0a9d3f3405f98e7e34a2", + "markers/symbolMarkers/symbol-question.svg": "4fa38607395b4279cf5afb09c9747b901e8da82b7a4924f41d13004e1357b17b", + "markers/symbolMarkers/symbol-plus.svg": "cf742985186eae01e267378c35863af1ef8c9735f1b9be80b5afd2b6dcba8230", + "markers/symbolMarkers/symbol-minus.svg": "197726b006288a010867b088156959e5a6a00d4f8ca9d94aae611021e56b08a8", + "markers/symbolMarkers/symbol-info.svg": "d76e3c58300764b6688b800481e5eb57a0bb349ad2367a33262073104ac37272", + "markers/symbolMarkers/symbol-attention.svg": "0ebdbde57686dae61d292bc430d129a917380f798bf56a897953531556af1a8a", + "markers/symbolMarkers/symbol-wrong.svg": "06a92a21e4aa890b16f3d4ada3874d1afdc6da83e832eabc85d8c678fb4db980", + "markers/symbolMarkers/symbol-right.svg": "5ff8262467c5dd9c49ab3159323efbc0c82455f9c2e2be6dc2aa4ee8fac65483", + "markers/symbolMarkers/symbol-pause.svg": "0d79c7cdd6402f9789e9d68ce83bbd532e7c0d3d5b664023b9d14118b4080d05", + "markers/symbolMarkers/c_simbol-plus.svg": "553b3f7a2a1137ece18bf3ed67969f9a2657aa552778217e8712fc5da1e87e36", + "markers/symbolMarkers/c_simbol-minus.svg": "328a88b06d714f163a906b8c63627bcd8cb35e7eaaea66d84d0711cf6818b776", + "markers/symbolMarkers/c_simbol-question.svg": "1f61b69d7bfd7b965aa941cf9ebaca68cb55950fc3de37eacba01171930402c1", + "markers/symbolMarkers/c_simbol-info.svg": "abdea6995ca36e4151c0b25f7c2e669a27418f95fb399b057399e1494e6db1e0", + "markers/symbolMarkers/c_simbol-wrong.svg": "aaa2357a374cf8bc0bd1075aa9c9bbf2737744925088562941e3d867580fc7f2", + "markers/symbolMarkers/c_simbol-right.svg": "3d3af0266bd5c9958055fa458f128cbc5e5126d8d0d44d38c0e0a58438a64420", + "markers/symbolMarkers/c_simbol-pause.svg": "d97b402b7c2c88b805eb04158cb4e6edbf31e570ac29d91b6500233f113e72a9", + "markers/symbolMarkers/c_symbol_contact.svg": "d4e991247970d40c1e0013b47544e44f78a5ad9717e8d0778bd0fc497f5c80f4", + "markers/symbolMarkers/c_symbol_drink.svg": "b09aefce4ef34fc860c30850f776692060e89c76f4b1a8de5d078d8bdfd0352c", + "markers/symbolMarkers/c_symbol_line_graph.svg": "3dfa07b12948d5b4a5558ce40470c94bb6479ff6caaa199fe765443b2ac251a4", + "markers/symbolMarkers/c_symbol_medals.svg": "9747752c0d075724e53b2d97a3516c58d3a0639b2ab2731dcb5c490e51d93b2d", + "markers/symbolMarkers/c_symbol_thermometer.svg": "e98b276be8bd7b8ff374eca0f7fdaed45092e58389303620e505e3e1c77ba55e", + "markers/symbolMarkers/c_symbol_money.svg": "fdf4adeffb96bf8883d8fe40be1a19acdb7bb5f0e71218c6e0626c8ddd5a46a4", + "markers/symbolMarkers/c_symbol_bar_chart.svg": "d46b00d46dfa7ee0218cfc64ea720e56ec6465952ddfcb19ec310d43f61fed76", + "markers/symbolMarkers/c_simbol-exclam.svg": "d747c3fd1307da8f9540e03b88bba50575a698c9312e0a9d3f3405f98e7e34a2", + "markers/symbolMarkers/c_symbol_pie_chart.svg": "6ddf61684f0e6c83443694be65d069ee8724774f3bbafce3d32a30860899dfc4", + "markers/symbolMarkers/c_symbol_shopping_cart.svg": "e24b45272326c03570cfc8d0a8b342a383a284c6c04b7a7f72ef53a9b5c538c4", + "markers/symbolMarkers/c_symbol_exercise.svg": "f54d31f641521826e6ccec2996a1071d27a1370c9bfe1e31c7a6242362e22985", + "markers/symbolMarkers/c_symbol_trophy.svg": "f42c11eae82c3d03e0ea129927c7b94c5bbb8fbd1b68f6fa15092566f1689724", + "markers/symbolMarkers/symbol-unlock.svg": "3ac9835c986ec972c4715375f5bc4a371c080fd9c8bd304c3c088ff1b847477e", + "markers/symbolMarkers/c_symbol_lock.svg": "2186e4d3b26f3185a7918229668fdd5144e0714883b1334d32289ba55572899a", + "markers/symbolMarkers/symbol-diamond.svg": "f5a1cf503bc6d68028a9d21597e12f13154837d57849468249a972efc6f07b5c", + "markers/monthMarkers/month-jan.svg": "ff02b2b76ac2bfb3d5ac8ea9a244c8f35abf4aba1f91e5ec931777ca5962212d", + "markers/monthMarkers/month-feb.svg": "41a9f329e4cf4f3572542d191d56cc87d569c6a1e353068c54edbba446d0c5bc", + "markers/monthMarkers/month-mar.svg": "87eac76fc3b8440f5fc4fb3e2d9be28d34b36a60d5cf64102a6e29381dc34926", + "markers/monthMarkers/month-apr.svg": "8658b12b337472e8af3fc37ba297c0d2ed67b0a461542cd7c4da853fec3e6e9e", + "markers/monthMarkers/month-may.svg": "f7042f1a4517a2b382e8b82f792b26d9ffdb2ace0188bece5f326df66915bb75", + "markers/monthMarkers/month-jun.svg": "74049ac7cd5dcffa6d4b994784ce15723eb352f412223b85204c9ddd5460d621", + "markers/monthMarkers/month-jul.svg": "99d7937fdb7653e94c1e07a18e7e1254047ed5964bce087ff4b7a478f6a40e81", + "markers/monthMarkers/month-aug.svg": "14ad8a1938de5fae4f12d0f0f87df65399ab34a71e3fc8d1c35e14ee58e6092f", + "markers/monthMarkers/month-sep.svg": "dfff7c5ac4ce78a43501fa6d3f542e895d87ff9278092b34da986e4397f873c8", + "markers/monthMarkers/month-oct.svg": "987395a640202c17082646b0a5ecea696fdf23ad20e40f5db917f4585b22459f", + "markers/monthMarkers/month-nov.svg": "5e2bfdf9bc21db50d203ce9e5005ba2a02e92cf414990468bee7fcbe251358ab", + "markers/monthMarkers/month-dec.svg": "80203303ec10f52d0f64b1f312131c5763fab150ead6b593267bf22b0b0feb6b", + "markers/weekMarkers/week-sun.svg": "f0aa3e80fec5d1714bbda4dcc30ff39c9449b95b585b45e0e477d360a2804ac9", + "markers/weekMarkers/week-mon.svg": "3b2895d3680e862270f359ffe81dd3798ab488d171156eb9b072d128b5612263", + "markers/weekMarkers/week-tue.svg": "ee66f37eca59862a7c681823708e5d01e2165e59ba61e6e6e513cdbf5f2f5bcc", + "markers/weekMarkers/week-wed.svg": "8b91658b4ac1a87fe96313046882c49d204abfc4b9230d1c2b7d3e4eb4269a87", + "markers/weekMarkers/week-thu.svg": "b70de55fbdceec1b400fc8b6ac4ee4c9ee9f34a07ea4a963fe17bf7116d9276e", + "markers/weekMarkers/week-fri.svg": "a2a718ebcaebdeb1a381fa0ebca71b78fe5f02ef151a57e0b313b732254af533", + "markers/weekMarkers/week-sat.svg": "280893daf1c4fc0eb4283a83cf782d6196460f4a7cbc91f86b934f2bb764e247", + "markers/halfStarMarkers/half-star-green.png": "de1c9174cf280c6df4397f70b69efe0a5ee399cf2d57401bc543a11af6a67289", + "markers/halfStarMarkers/half-star-red.png": "7df1c0c7614c030db640a84db568d233ead730955976beddb52f228bf080b743", + "markers/halfStarMarkers/half-star-yellow.png": "bb46b002fafbe01a2ca6cfcd02da238842bf7f85a7f5870ab49def3a14687547", + "markers/halfStarMarkers/half-star-purple.png": "1ff8b44fe95c1eca8448d91d36dc47908ce1e4b20b62ba7bd2b51f48604added", + "markers/halfStarMarkers/half-star-blue.png": "c914c40b5d7fbafd1df30a217166f43cab0467d12e829a0c49bc373a4ee1ac07", + "markers/halfStarMarkers/half-star-gray.png": "90c1eda261e4088a3540cd100fb05c03c00c1429a29fcf6441208a8e32d4c2b1", + "markers/otherMarkers/other-calendar.png": "11d47694527ffe1139612e198d5452c7255aeb94afa943fc0c1d9666c3267635", + "markers/otherMarkers/other-email.png": "ab77289d93e00fba11f4b1830ea6e004cc7849a2974890e3138990e1509486f0", + "markers/otherMarkers/other-phone.png": "283fceeb1e86b8d09b76842f3ba0a480fef3309ea496245896ab4593b2fd7173", + "markers/otherMarkers/other-phone2.png": "28cd46db008917397d0b31b55907f072f3b5f7fc02cb261cf3b110bdda85ea06", + "markers/otherMarkers/other-fax.png": "9b5a573dc9a41200db5072b50540e6d3a65da2f1f061cd656f4466aab4d3e132", + "markers/otherMarkers/other-people.png": "bf03b3ce3ea87aaaac195e59d4755d60df1801edeb2f7880e290d56288b7ed25", + "markers/otherMarkers/other-people2.png": "fedfbee62b25cc101f3e671e0210ce84f75065633d2e4c1a30d4427cd9106e0b", + "markers/otherMarkers/other-clock.png": "9fdd7b90359a6317967477687646f31703ec978c76064ee7bc94adec118f2e32", + "markers/otherMarkers/other-coffee-cup.png": "1a00cc293a2f67daf3654f4f240cd5c7bb895c234036f93b100d5eb0625df19d", + "markers/otherMarkers/other-question.svg": "c9ee628aaf67926576ff55884359ece669fd7ffab0ff7bd1fdd5b95869dbb652", + "markers/otherMarkers/other-exclam.svg": "f69ebbff001625e908bb59f8f1010f7477522c1008103570d09d24b2e8809e77", + "markers/otherMarkers/other-lightbulb.png": "2d487aeb22618f7465af3238e7a38214ba591304e838b5f67c3fcf9f54da9543", + "markers/otherMarkers/other-businesscard.png": "6dec9dd1ff646085e274f170c0d002324f247de4a020fde07f5adbcbff7f496b", + "markers/otherMarkers/other-social.png": "16c7494641ba0b6f85bebc7ec9a1c3e05d5b624b58b16be554a598209b0bcd32", + "markers/otherMarkers/other-chat.png": "c363849db2fdaf7a8becdcaf11be5da23d1b3b1c395f474b2f351eebbce2d4c3", + "markers/otherMarkers/other-note.png": "b517cd81b649f0858905f2043236b3855f1589d623d0bc971972111f505b9ed5", + "markers/otherMarkers/other-lock.png": "294bc796e925ec77519d6499b162d6b097a5d25b3e510af7a3c934204381dd19", + "markers/otherMarkers/other-unlock.png": "84204c32fa7bb7998282d3969824cb8c8759761db0a61f6f1c097e58c7617dd4", + "markers/otherMarkers/other-yes.svg": "5ff8262467c5dd9c49ab3159323efbc0c82455f9c2e2be6dc2aa4ee8fac65483", + "markers/otherMarkers/other-no.svg": "06a92a21e4aa890b16f3d4ada3874d1afdc6da83e832eabc85d8c678fb4db980", + "markers/otherMarkers/other-bomb.png": "d2b10c564d34ce666a25016fe508e14e5264c6b1aca82aae9c58196e5f6a5fb4", + "markers/otherMarkers/symbol-info.svg": "d76e3c58300764b6688b800481e5eb57a0bb349ad2367a33262073104ac37272", + "markers/otherMarkers/c_symbol_line_graph.svg": "3dfa07b12948d5b4a5558ce40470c94bb6479ff6caaa199fe765443b2ac251a4", + "markers/otherMarkers/c_symbol_shopping_cart.svg": "e24b45272326c03570cfc8d0a8b342a383a284c6c04b7a7f72ef53a9b5c538c4", + "markers/otherMarkers/c_symbol_medals.svg": "9747752c0d075724e53b2d97a3516c58d3a0639b2ab2731dcb5c490e51d93b2d", + "markers/otherMarkers/c_symbol_trophy.svg": "f42c11eae82c3d03e0ea129927c7b94c5bbb8fbd1b68f6fa15092566f1689724", + "markers/otherMarkers/symbol-image.svg": "503fd6d221f220579dd6087d65b532d29eab2907ac7c55bf9c9947f80bbe743f", + "markers/otherMarkers/c_symbol_exercise.svg": "f54d31f641521826e6ccec2996a1071d27a1370c9bfe1e31c7a6242362e22985", + "markers/otherMarkers/c_simbol-plus.svg": "cf742985186eae01e267378c35863af1ef8c9735f1b9be80b5afd2b6dcba8230", + "markers/otherMarkers/c_simbol-minus.svg": "197726b006288a010867b088156959e5a6a00d4f8ca9d94aae611021e56b08a8", + "markers/otherMarkers/c_simbol-question.svg": "1f61b69d7bfd7b965aa941cf9ebaca68cb55950fc3de37eacba01171930402c1", + "markers/otherMarkers/c_simbol-info.svg": "d76e3c58300764b6688b800481e5eb57a0bb349ad2367a33262073104ac37272", + "markers/otherMarkers/c_simbol-wrong.svg": "aaa2357a374cf8bc0bd1075aa9c9bbf2737744925088562941e3d867580fc7f2", + "markers/otherMarkers/c_simbol-right.svg": "5ff8262467c5dd9c49ab3159323efbc0c82455f9c2e2be6dc2aa4ee8fac65483", + "markers/otherMarkers/c_simbol-pause.svg": "0d79c7cdd6402f9789e9d68ce83bbd532e7c0d3d5b664023b9d14118b4080d05", + "markers/otherMarkers/c_symbol_thermometer.svg": "e98b276be8bd7b8ff374eca0f7fdaed45092e58389303620e505e3e1c77ba55e" +} diff --git a/public/icons/xmind/markers/monthMarkers/month-apr.svg b/public/icons/xmind/markers/monthMarkers/month-apr.svg new file mode 100644 index 000000000..cd9fd3a76 --- /dev/null +++ b/public/icons/xmind/markers/monthMarkers/month-apr.svg @@ -0,0 +1,22 @@ + + + + month_apr@16 + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/monthMarkers/month-aug.svg b/public/icons/xmind/markers/monthMarkers/month-aug.svg new file mode 100644 index 000000000..1d7e77328 --- /dev/null +++ b/public/icons/xmind/markers/monthMarkers/month-aug.svg @@ -0,0 +1,22 @@ + + + + month_aug@16 + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/monthMarkers/month-dec.svg b/public/icons/xmind/markers/monthMarkers/month-dec.svg new file mode 100644 index 000000000..cf04a443c --- /dev/null +++ b/public/icons/xmind/markers/monthMarkers/month-dec.svg @@ -0,0 +1,13 @@ + + + + month_dec@16 + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/monthMarkers/month-feb.svg b/public/icons/xmind/markers/monthMarkers/month-feb.svg new file mode 100644 index 000000000..419ea8884 --- /dev/null +++ b/public/icons/xmind/markers/monthMarkers/month-feb.svg @@ -0,0 +1,22 @@ + + + + month_feb@16 + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/monthMarkers/month-jan.svg b/public/icons/xmind/markers/monthMarkers/month-jan.svg new file mode 100644 index 000000000..aeba92eb5 --- /dev/null +++ b/public/icons/xmind/markers/monthMarkers/month-jan.svg @@ -0,0 +1,22 @@ + + + + month_jan@16 + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/monthMarkers/month-jul.svg b/public/icons/xmind/markers/monthMarkers/month-jul.svg new file mode 100644 index 000000000..c63d36cca --- /dev/null +++ b/public/icons/xmind/markers/monthMarkers/month-jul.svg @@ -0,0 +1,13 @@ + + + + month_jul@16 + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/monthMarkers/month-jun.svg b/public/icons/xmind/markers/monthMarkers/month-jun.svg new file mode 100644 index 000000000..8064a88d4 --- /dev/null +++ b/public/icons/xmind/markers/monthMarkers/month-jun.svg @@ -0,0 +1,22 @@ + + + + month_jun@16 + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/monthMarkers/month-mar.svg b/public/icons/xmind/markers/monthMarkers/month-mar.svg new file mode 100644 index 000000000..5888b933b --- /dev/null +++ b/public/icons/xmind/markers/monthMarkers/month-mar.svg @@ -0,0 +1,22 @@ + + + + month_mar@16 + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/monthMarkers/month-may.svg b/public/icons/xmind/markers/monthMarkers/month-may.svg new file mode 100644 index 000000000..05020d030 --- /dev/null +++ b/public/icons/xmind/markers/monthMarkers/month-may.svg @@ -0,0 +1,22 @@ + + + + month_may@16 + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/monthMarkers/month-nov.svg b/public/icons/xmind/markers/monthMarkers/month-nov.svg new file mode 100644 index 000000000..99c6d3884 --- /dev/null +++ b/public/icons/xmind/markers/monthMarkers/month-nov.svg @@ -0,0 +1,13 @@ + + + + month_nov@16 + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/monthMarkers/month-oct.svg b/public/icons/xmind/markers/monthMarkers/month-oct.svg new file mode 100644 index 000000000..161208d61 --- /dev/null +++ b/public/icons/xmind/markers/monthMarkers/month-oct.svg @@ -0,0 +1,13 @@ + + + + month_oct@16 + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/monthMarkers/month-sep.svg b/public/icons/xmind/markers/monthMarkers/month-sep.svg new file mode 100644 index 000000000..b9711ff40 --- /dev/null +++ b/public/icons/xmind/markers/monthMarkers/month-sep.svg @@ -0,0 +1,13 @@ + + + + month_sep@16 + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/otherMarkers/c_simbol-info.svg b/public/icons/xmind/markers/otherMarkers/c_simbol-info.svg new file mode 100644 index 000000000..5ddd55fb0 --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/c_simbol-info.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/icons/xmind/markers/otherMarkers/c_simbol-minus.svg b/public/icons/xmind/markers/otherMarkers/c_simbol-minus.svg new file mode 100644 index 000000000..3939cf4b1 --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/c_simbol-minus.svg @@ -0,0 +1,26 @@ + + + + symbol_minus@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/otherMarkers/c_simbol-pause.svg b/public/icons/xmind/markers/otherMarkers/c_simbol-pause.svg new file mode 100644 index 000000000..858307e6e --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/c_simbol-pause.svg @@ -0,0 +1,27 @@ + + + + symbol_pause@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/otherMarkers/c_simbol-plus.svg b/public/icons/xmind/markers/otherMarkers/c_simbol-plus.svg new file mode 100644 index 000000000..c0a3953fd --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/c_simbol-plus.svg @@ -0,0 +1,21 @@ + + + + symbol_plus@16 + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/otherMarkers/c_simbol-question.svg b/public/icons/xmind/markers/otherMarkers/c_simbol-question.svg new file mode 100644 index 000000000..91254ffd6 --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/c_simbol-question.svg @@ -0,0 +1,11 @@ + + + + Oval 1 Copy 37 + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/otherMarkers/c_simbol-right.svg b/public/icons/xmind/markers/otherMarkers/c_simbol-right.svg new file mode 100644 index 000000000..847bda337 --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/c_simbol-right.svg @@ -0,0 +1,21 @@ + + + + symbol_right@16 + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/otherMarkers/c_simbol-wrong.svg b/public/icons/xmind/markers/otherMarkers/c_simbol-wrong.svg new file mode 100644 index 000000000..1f8771c4c --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/c_simbol-wrong.svg @@ -0,0 +1,11 @@ + + + + Oval 1 Copy 38 + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/otherMarkers/c_symbol_exercise.svg b/public/icons/xmind/markers/otherMarkers/c_symbol_exercise.svg new file mode 100644 index 000000000..7b8c5d507 --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/c_symbol_exercise.svg @@ -0,0 +1,12 @@ + + + + symbol_exercise + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/otherMarkers/c_symbol_line_graph.svg b/public/icons/xmind/markers/otherMarkers/c_symbol_line_graph.svg new file mode 100644 index 000000000..d4e01b96b --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/c_symbol_line_graph.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/icons/xmind/markers/otherMarkers/c_symbol_medals.svg b/public/icons/xmind/markers/otherMarkers/c_symbol_medals.svg new file mode 100644 index 000000000..462f3bac5 --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/c_symbol_medals.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/icons/xmind/markers/otherMarkers/c_symbol_shopping_cart.svg b/public/icons/xmind/markers/otherMarkers/c_symbol_shopping_cart.svg new file mode 100644 index 000000000..c84f529a5 --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/c_symbol_shopping_cart.svg @@ -0,0 +1,24 @@ + + + + symbol_shopping_cart + Created with Sketch. + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/otherMarkers/c_symbol_thermometer.svg b/public/icons/xmind/markers/otherMarkers/c_symbol_thermometer.svg new file mode 100644 index 000000000..300fb560d --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/c_symbol_thermometer.svg @@ -0,0 +1,28 @@ + + + + sym_温度计 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/otherMarkers/c_symbol_trophy.svg b/public/icons/xmind/markers/otherMarkers/c_symbol_trophy.svg new file mode 100644 index 000000000..dde0c1f98 --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/c_symbol_trophy.svg @@ -0,0 +1,28 @@ + + + + symbol_trophy + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/otherMarkers/other-bomb.png b/public/icons/xmind/markers/otherMarkers/other-bomb.png new file mode 100644 index 000000000..aeb723bb6 Binary files /dev/null and b/public/icons/xmind/markers/otherMarkers/other-bomb.png differ diff --git a/public/icons/xmind/markers/otherMarkers/other-businesscard.png b/public/icons/xmind/markers/otherMarkers/other-businesscard.png new file mode 100644 index 000000000..120af7f36 Binary files /dev/null and b/public/icons/xmind/markers/otherMarkers/other-businesscard.png differ diff --git a/public/icons/xmind/markers/otherMarkers/other-calendar.png b/public/icons/xmind/markers/otherMarkers/other-calendar.png new file mode 100644 index 000000000..8623cae5e Binary files /dev/null and b/public/icons/xmind/markers/otherMarkers/other-calendar.png differ diff --git a/public/icons/xmind/markers/otherMarkers/other-chat.png b/public/icons/xmind/markers/otherMarkers/other-chat.png new file mode 100644 index 000000000..9997abdf6 Binary files /dev/null and b/public/icons/xmind/markers/otherMarkers/other-chat.png differ diff --git a/public/icons/xmind/markers/otherMarkers/other-clock.png b/public/icons/xmind/markers/otherMarkers/other-clock.png new file mode 100644 index 000000000..a7dc740dc Binary files /dev/null and b/public/icons/xmind/markers/otherMarkers/other-clock.png differ diff --git a/public/icons/xmind/markers/otherMarkers/other-coffee-cup.png b/public/icons/xmind/markers/otherMarkers/other-coffee-cup.png new file mode 100644 index 000000000..fbe3c2700 Binary files /dev/null and b/public/icons/xmind/markers/otherMarkers/other-coffee-cup.png differ diff --git a/public/icons/xmind/markers/otherMarkers/other-email.png b/public/icons/xmind/markers/otherMarkers/other-email.png new file mode 100644 index 000000000..02fce6d53 Binary files /dev/null and b/public/icons/xmind/markers/otherMarkers/other-email.png differ diff --git a/public/icons/xmind/markers/otherMarkers/other-exclam.svg b/public/icons/xmind/markers/otherMarkers/other-exclam.svg new file mode 100644 index 000000000..771b23645 --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/other-exclam.svg @@ -0,0 +1,11 @@ + + + + Triangle 29 + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/otherMarkers/other-fax.png b/public/icons/xmind/markers/otherMarkers/other-fax.png new file mode 100644 index 000000000..da6df11bb Binary files /dev/null and b/public/icons/xmind/markers/otherMarkers/other-fax.png differ diff --git a/public/icons/xmind/markers/otherMarkers/other-lightbulb.png b/public/icons/xmind/markers/otherMarkers/other-lightbulb.png new file mode 100644 index 000000000..554dd82bf Binary files /dev/null and b/public/icons/xmind/markers/otherMarkers/other-lightbulb.png differ diff --git a/public/icons/xmind/markers/otherMarkers/other-lock.png b/public/icons/xmind/markers/otherMarkers/other-lock.png new file mode 100644 index 000000000..56a04996b Binary files /dev/null and b/public/icons/xmind/markers/otherMarkers/other-lock.png differ diff --git a/public/icons/xmind/markers/otherMarkers/other-no.svg b/public/icons/xmind/markers/otherMarkers/other-no.svg new file mode 100644 index 000000000..411244248 --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/other-no.svg @@ -0,0 +1,21 @@ + + + + symbol_wrong@16 + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/otherMarkers/other-note.png b/public/icons/xmind/markers/otherMarkers/other-note.png new file mode 100644 index 000000000..b074e33c4 Binary files /dev/null and b/public/icons/xmind/markers/otherMarkers/other-note.png differ diff --git a/public/icons/xmind/markers/otherMarkers/other-people.png b/public/icons/xmind/markers/otherMarkers/other-people.png new file mode 100644 index 000000000..33ee0b7dd Binary files /dev/null and b/public/icons/xmind/markers/otherMarkers/other-people.png differ diff --git a/public/icons/xmind/markers/otherMarkers/other-people2.png b/public/icons/xmind/markers/otherMarkers/other-people2.png new file mode 100644 index 000000000..fba6da389 Binary files /dev/null and b/public/icons/xmind/markers/otherMarkers/other-people2.png differ diff --git a/public/icons/xmind/markers/otherMarkers/other-phone.png b/public/icons/xmind/markers/otherMarkers/other-phone.png new file mode 100644 index 000000000..39d317295 Binary files /dev/null and b/public/icons/xmind/markers/otherMarkers/other-phone.png differ diff --git a/public/icons/xmind/markers/otherMarkers/other-phone2.png b/public/icons/xmind/markers/otherMarkers/other-phone2.png new file mode 100644 index 000000000..518bf48bd Binary files /dev/null and b/public/icons/xmind/markers/otherMarkers/other-phone2.png differ diff --git a/public/icons/xmind/markers/otherMarkers/other-question.svg b/public/icons/xmind/markers/otherMarkers/other-question.svg new file mode 100644 index 000000000..37f19ef65 --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/other-question.svg @@ -0,0 +1,27 @@ + + + + symbol_question@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/otherMarkers/other-social.png b/public/icons/xmind/markers/otherMarkers/other-social.png new file mode 100644 index 000000000..33909fced Binary files /dev/null and b/public/icons/xmind/markers/otherMarkers/other-social.png differ diff --git a/public/icons/xmind/markers/otherMarkers/other-unlock.png b/public/icons/xmind/markers/otherMarkers/other-unlock.png new file mode 100644 index 000000000..5db185f86 Binary files /dev/null and b/public/icons/xmind/markers/otherMarkers/other-unlock.png differ diff --git a/public/icons/xmind/markers/otherMarkers/other-yes.svg b/public/icons/xmind/markers/otherMarkers/other-yes.svg new file mode 100644 index 000000000..847bda337 --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/other-yes.svg @@ -0,0 +1,21 @@ + + + + symbol_right@16 + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/otherMarkers/symbol-image.svg b/public/icons/xmind/markers/otherMarkers/symbol-image.svg new file mode 100644 index 000000000..8e5bea156 --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/symbol-image.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/public/icons/xmind/markers/otherMarkers/symbol-info.svg b/public/icons/xmind/markers/otherMarkers/symbol-info.svg new file mode 100644 index 000000000..5ddd55fb0 --- /dev/null +++ b/public/icons/xmind/markers/otherMarkers/symbol-info.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/icons/xmind/markers/peopleMarkers/people-blue.svg b/public/icons/xmind/markers/peopleMarkers/people-blue.svg new file mode 100644 index 000000000..70e5fb58b --- /dev/null +++ b/public/icons/xmind/markers/peopleMarkers/people-blue.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/peopleMarkers/people-dark-blue.svg b/public/icons/xmind/markers/peopleMarkers/people-dark-blue.svg new file mode 100644 index 000000000..47dcbb607 --- /dev/null +++ b/public/icons/xmind/markers/peopleMarkers/people-dark-blue.svg @@ -0,0 +1,12 @@ + + + + people_dark_blue@16 + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/peopleMarkers/people-dark-gray.svg b/public/icons/xmind/markers/peopleMarkers/people-dark-gray.svg new file mode 100644 index 000000000..fc7d03381 --- /dev/null +++ b/public/icons/xmind/markers/peopleMarkers/people-dark-gray.svg @@ -0,0 +1,21 @@ + + + + peo_bla + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/peopleMarkers/people-dark-green.svg b/public/icons/xmind/markers/peopleMarkers/people-dark-green.svg new file mode 100644 index 000000000..d894053b4 --- /dev/null +++ b/public/icons/xmind/markers/peopleMarkers/people-dark-green.svg @@ -0,0 +1,17 @@ + + + + peo_gra + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/peopleMarkers/people-gray.svg b/public/icons/xmind/markers/peopleMarkers/people-gray.svg new file mode 100644 index 000000000..a25e7d094 --- /dev/null +++ b/public/icons/xmind/markers/peopleMarkers/people-gray.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/peopleMarkers/people-green.svg b/public/icons/xmind/markers/peopleMarkers/people-green.svg new file mode 100644 index 000000000..59c15314f --- /dev/null +++ b/public/icons/xmind/markers/peopleMarkers/people-green.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/peopleMarkers/people-orange.svg b/public/icons/xmind/markers/peopleMarkers/people-orange.svg new file mode 100644 index 000000000..3a8288921 --- /dev/null +++ b/public/icons/xmind/markers/peopleMarkers/people-orange.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/peopleMarkers/people-purple.svg b/public/icons/xmind/markers/peopleMarkers/people-purple.svg new file mode 100644 index 000000000..a493ee17f --- /dev/null +++ b/public/icons/xmind/markers/peopleMarkers/people-purple.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/public/icons/xmind/markers/peopleMarkers/people-red.svg b/public/icons/xmind/markers/peopleMarkers/people-red.svg new file mode 100644 index 000000000..335ff521a --- /dev/null +++ b/public/icons/xmind/markers/peopleMarkers/people-red.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/peopleMarkers/people-yellow.svg b/public/icons/xmind/markers/peopleMarkers/people-yellow.svg new file mode 100644 index 000000000..4854633d2 --- /dev/null +++ b/public/icons/xmind/markers/peopleMarkers/people-yellow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/priorityMarkers/priority-1.svg b/public/icons/xmind/markers/priorityMarkers/priority-1.svg new file mode 100644 index 000000000..6f5bce1cf --- /dev/null +++ b/public/icons/xmind/markers/priorityMarkers/priority-1.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/priorityMarkers/priority-2.svg b/public/icons/xmind/markers/priorityMarkers/priority-2.svg new file mode 100644 index 000000000..062886d29 --- /dev/null +++ b/public/icons/xmind/markers/priorityMarkers/priority-2.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/priorityMarkers/priority-3.svg b/public/icons/xmind/markers/priorityMarkers/priority-3.svg new file mode 100644 index 000000000..cbab34e5b --- /dev/null +++ b/public/icons/xmind/markers/priorityMarkers/priority-3.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/public/icons/xmind/markers/priorityMarkers/priority-4.svg b/public/icons/xmind/markers/priorityMarkers/priority-4.svg new file mode 100644 index 000000000..9166f74d2 --- /dev/null +++ b/public/icons/xmind/markers/priorityMarkers/priority-4.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/priorityMarkers/priority-5.svg b/public/icons/xmind/markers/priorityMarkers/priority-5.svg new file mode 100644 index 000000000..e2e384e86 --- /dev/null +++ b/public/icons/xmind/markers/priorityMarkers/priority-5.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/priorityMarkers/priority-6.svg b/public/icons/xmind/markers/priorityMarkers/priority-6.svg new file mode 100644 index 000000000..7a615a60b --- /dev/null +++ b/public/icons/xmind/markers/priorityMarkers/priority-6.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/priorityMarkers/priority-7.svg b/public/icons/xmind/markers/priorityMarkers/priority-7.svg new file mode 100644 index 000000000..6aab421aa --- /dev/null +++ b/public/icons/xmind/markers/priorityMarkers/priority-7.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/priorityMarkers/priority-8.svg b/public/icons/xmind/markers/priorityMarkers/priority-8.svg new file mode 100644 index 000000000..8e9ced2dd --- /dev/null +++ b/public/icons/xmind/markers/priorityMarkers/priority-8.svg @@ -0,0 +1,20 @@ + + + + task_8 + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/priorityMarkers/priority-9.svg b/public/icons/xmind/markers/priorityMarkers/priority-9.svg new file mode 100644 index 000000000..9e621d972 --- /dev/null +++ b/public/icons/xmind/markers/priorityMarkers/priority-9.svg @@ -0,0 +1,20 @@ + + + + task_9 + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/smileyMarkers/smiley-adore.svg b/public/icons/xmind/markers/smileyMarkers/smiley-adore.svg new file mode 100644 index 000000000..509898a42 --- /dev/null +++ b/public/icons/xmind/markers/smileyMarkers/smiley-adore.svg @@ -0,0 +1,25 @@ + + + + emotion_adore@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/smileyMarkers/smiley-angry.svg b/public/icons/xmind/markers/smileyMarkers/smiley-angry.svg new file mode 100644 index 000000000..f05301012 --- /dev/null +++ b/public/icons/xmind/markers/smileyMarkers/smiley-angry.svg @@ -0,0 +1,25 @@ + + + + emotion_angry@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/smileyMarkers/smiley-boring.svg b/public/icons/xmind/markers/smileyMarkers/smiley-boring.svg new file mode 100644 index 000000000..8e0bf0936 --- /dev/null +++ b/public/icons/xmind/markers/smileyMarkers/smiley-boring.svg @@ -0,0 +1,25 @@ + + + + emotion_boring@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/smileyMarkers/smiley-cry-laugh.svg b/public/icons/xmind/markers/smileyMarkers/smiley-cry-laugh.svg new file mode 100644 index 000000000..75b120e93 --- /dev/null +++ b/public/icons/xmind/markers/smileyMarkers/smiley-cry-laugh.svg @@ -0,0 +1,32 @@ + + + + emotion_cry_laugh@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/smileyMarkers/smiley-cry.svg b/public/icons/xmind/markers/smileyMarkers/smiley-cry.svg new file mode 100644 index 000000000..a201ecb20 --- /dev/null +++ b/public/icons/xmind/markers/smileyMarkers/smiley-cry.svg @@ -0,0 +1,25 @@ + + + + emotion_cry@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + diff --git a/public/icons/xmind/markers/smileyMarkers/smiley-devil.svg b/public/icons/xmind/markers/smileyMarkers/smiley-devil.svg new file mode 100644 index 000000000..58660945a --- /dev/null +++ b/public/icons/xmind/markers/smileyMarkers/smiley-devil.svg @@ -0,0 +1,41 @@ + + + + emotion_devil@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/smileyMarkers/smiley-embarrass.svg b/public/icons/xmind/markers/smileyMarkers/smiley-embarrass.svg new file mode 100644 index 000000000..3c51ee56e --- /dev/null +++ b/public/icons/xmind/markers/smileyMarkers/smiley-embarrass.svg @@ -0,0 +1,23 @@ + + + + emotion_embrrass@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/smileyMarkers/smiley-laugh.svg b/public/icons/xmind/markers/smileyMarkers/smiley-laugh.svg new file mode 100644 index 000000000..a48859214 --- /dev/null +++ b/public/icons/xmind/markers/smileyMarkers/smiley-laugh.svg @@ -0,0 +1,25 @@ + + + + emotion_laugh@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/smileyMarkers/smiley-love.svg b/public/icons/xmind/markers/smileyMarkers/smiley-love.svg new file mode 100644 index 000000000..1aded9cb5 --- /dev/null +++ b/public/icons/xmind/markers/smileyMarkers/smiley-love.svg @@ -0,0 +1,17 @@ + + + + emotion_love@16 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/smileyMarkers/smiley-sad.svg b/public/icons/xmind/markers/smileyMarkers/smiley-sad.svg new file mode 100644 index 000000000..7b40662e9 --- /dev/null +++ b/public/icons/xmind/markers/smileyMarkers/smiley-sad.svg @@ -0,0 +1,23 @@ + + + + emotion_sad@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/smileyMarkers/smiley-smile.svg b/public/icons/xmind/markers/smileyMarkers/smiley-smile.svg new file mode 100644 index 000000000..4166e9734 --- /dev/null +++ b/public/icons/xmind/markers/smileyMarkers/smiley-smile.svg @@ -0,0 +1,23 @@ + + + + emotion_smile@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/smileyMarkers/smiley-surprise.svg b/public/icons/xmind/markers/smileyMarkers/smiley-surprise.svg new file mode 100644 index 000000000..ca84170ef --- /dev/null +++ b/public/icons/xmind/markers/smileyMarkers/smiley-surprise.svg @@ -0,0 +1,28 @@ + + + + emotion_surprise@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/smileyMarkers/smiley-think.svg b/public/icons/xmind/markers/smileyMarkers/smiley-think.svg new file mode 100644 index 000000000..d268f8052 --- /dev/null +++ b/public/icons/xmind/markers/smileyMarkers/smiley-think.svg @@ -0,0 +1,32 @@ + + + + emotion_think@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/smileyMarkers/smiley-upset.svg b/public/icons/xmind/markers/smileyMarkers/smiley-upset.svg new file mode 100644 index 000000000..90577f07d --- /dev/null +++ b/public/icons/xmind/markers/smileyMarkers/smiley-upset.svg @@ -0,0 +1,23 @@ + + + + emotion_upset@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/socialMarkers/c_symbol_broken_heart.svg b/public/icons/xmind/markers/socialMarkers/c_symbol_broken_heart.svg new file mode 100644 index 000000000..58461bf53 --- /dev/null +++ b/public/icons/xmind/markers/socialMarkers/c_symbol_broken_heart.svg @@ -0,0 +1,12 @@ + + + + symbol_broken_heart + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/socialMarkers/c_symbol_contact.svg b/public/icons/xmind/markers/socialMarkers/c_symbol_contact.svg new file mode 100644 index 000000000..c15b7f97e --- /dev/null +++ b/public/icons/xmind/markers/socialMarkers/c_symbol_contact.svg @@ -0,0 +1,13 @@ + + + + symbol_contact + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/socialMarkers/symbol-comment.svg b/public/icons/xmind/markers/socialMarkers/symbol-comment.svg new file mode 100644 index 000000000..7acb9d433 --- /dev/null +++ b/public/icons/xmind/markers/socialMarkers/symbol-comment.svg @@ -0,0 +1,21 @@ + + + + symbol_comment + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/socialMarkers/symbol-no-entry.svg b/public/icons/xmind/markers/socialMarkers/symbol-no-entry.svg new file mode 100644 index 000000000..c55bee780 --- /dev/null +++ b/public/icons/xmind/markers/socialMarkers/symbol-no-entry.svg @@ -0,0 +1,12 @@ + + + + symbol_no_entry + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/socialMarkers/symbol-notice.svg b/public/icons/xmind/markers/socialMarkers/symbol-notice.svg new file mode 100644 index 000000000..037011fe2 --- /dev/null +++ b/public/icons/xmind/markers/socialMarkers/symbol-notice.svg @@ -0,0 +1,22 @@ + + + + symbol_notice + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/socialMarkers/symbol-rss.svg b/public/icons/xmind/markers/socialMarkers/symbol-rss.svg new file mode 100644 index 000000000..df132c76a --- /dev/null +++ b/public/icons/xmind/markers/socialMarkers/symbol-rss.svg @@ -0,0 +1,23 @@ + + + + symbol_rss + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/socialMarkers/symbol-share.svg b/public/icons/xmind/markers/socialMarkers/symbol-share.svg new file mode 100644 index 000000000..f0759cee6 --- /dev/null +++ b/public/icons/xmind/markers/socialMarkers/symbol-share.svg @@ -0,0 +1,25 @@ + + + + symbol_share + Created with Sketch. + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/socialMarkers/symbol_forward.svg b/public/icons/xmind/markers/socialMarkers/symbol_forward.svg new file mode 100644 index 000000000..751ad9260 --- /dev/null +++ b/public/icons/xmind/markers/socialMarkers/symbol_forward.svg @@ -0,0 +1,22 @@ + + + + symbol_forward + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/starMarkers/star-blue.svg b/public/icons/xmind/markers/starMarkers/star-blue.svg new file mode 100644 index 000000000..512355521 --- /dev/null +++ b/public/icons/xmind/markers/starMarkers/star-blue.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/starMarkers/star-dark-blue.svg b/public/icons/xmind/markers/starMarkers/star-dark-blue.svg new file mode 100644 index 000000000..b60ac2800 --- /dev/null +++ b/public/icons/xmind/markers/starMarkers/star-dark-blue.svg @@ -0,0 +1,12 @@ + + + + star_dark_blue@16 + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/starMarkers/star-dark-gray.svg b/public/icons/xmind/markers/starMarkers/star-dark-gray.svg new file mode 100644 index 000000000..7047fd385 --- /dev/null +++ b/public/icons/xmind/markers/starMarkers/star-dark-gray.svg @@ -0,0 +1,21 @@ + + + + star_bla + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/starMarkers/star-dark-green.svg b/public/icons/xmind/markers/starMarkers/star-dark-green.svg new file mode 100644 index 000000000..347d97212 --- /dev/null +++ b/public/icons/xmind/markers/starMarkers/star-dark-green.svg @@ -0,0 +1,17 @@ + + + + star_gra + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/starMarkers/star-gray.svg b/public/icons/xmind/markers/starMarkers/star-gray.svg new file mode 100644 index 000000000..38564e304 --- /dev/null +++ b/public/icons/xmind/markers/starMarkers/star-gray.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/starMarkers/star-green.svg b/public/icons/xmind/markers/starMarkers/star-green.svg new file mode 100644 index 000000000..8132f6afe --- /dev/null +++ b/public/icons/xmind/markers/starMarkers/star-green.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/starMarkers/star-orange.svg b/public/icons/xmind/markers/starMarkers/star-orange.svg new file mode 100644 index 000000000..5ee0812a6 --- /dev/null +++ b/public/icons/xmind/markers/starMarkers/star-orange.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/starMarkers/star-purple.svg b/public/icons/xmind/markers/starMarkers/star-purple.svg new file mode 100644 index 000000000..73a84c535 --- /dev/null +++ b/public/icons/xmind/markers/starMarkers/star-purple.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/public/icons/xmind/markers/starMarkers/star-red.svg b/public/icons/xmind/markers/starMarkers/star-red.svg new file mode 100644 index 000000000..1db133723 --- /dev/null +++ b/public/icons/xmind/markers/starMarkers/star-red.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/starMarkers/star-yellow.svg b/public/icons/xmind/markers/starMarkers/star-yellow.svg new file mode 100644 index 000000000..ab4fef98f --- /dev/null +++ b/public/icons/xmind/markers/starMarkers/star-yellow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/c_simbol-exclam.svg b/public/icons/xmind/markers/symbolMarkers/c_simbol-exclam.svg new file mode 100644 index 000000000..27cb761c1 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_simbol-exclam.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/c_simbol-info.svg b/public/icons/xmind/markers/symbolMarkers/c_simbol-info.svg new file mode 100644 index 000000000..f06474e64 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_simbol-info.svg @@ -0,0 +1,11 @@ + + + + Oval 1 Copy 35 + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/c_simbol-minus.svg b/public/icons/xmind/markers/symbolMarkers/c_simbol-minus.svg new file mode 100644 index 000000000..c481960ce --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_simbol-minus.svg @@ -0,0 +1,11 @@ + + + + Oval 1 Copy 40 + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/c_simbol-pause.svg b/public/icons/xmind/markers/symbolMarkers/c_simbol-pause.svg new file mode 100644 index 000000000..e7e3dee3e --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_simbol-pause.svg @@ -0,0 +1,11 @@ + + + + Oval 1 Copy 39 + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/c_simbol-plus.svg b/public/icons/xmind/markers/symbolMarkers/c_simbol-plus.svg new file mode 100644 index 000000000..8ce7c63f4 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_simbol-plus.svg @@ -0,0 +1,11 @@ + + + + Oval 1 Copy 41 + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/c_simbol-question.svg b/public/icons/xmind/markers/symbolMarkers/c_simbol-question.svg new file mode 100644 index 000000000..91254ffd6 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_simbol-question.svg @@ -0,0 +1,11 @@ + + + + Oval 1 Copy 37 + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/c_simbol-right.svg b/public/icons/xmind/markers/symbolMarkers/c_simbol-right.svg new file mode 100644 index 000000000..3ea125349 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_simbol-right.svg @@ -0,0 +1,11 @@ + + + + Oval 1 Copy 36 + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/c_simbol-wrong.svg b/public/icons/xmind/markers/symbolMarkers/c_simbol-wrong.svg new file mode 100644 index 000000000..1f8771c4c --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_simbol-wrong.svg @@ -0,0 +1,11 @@ + + + + Oval 1 Copy 38 + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_bar_chart.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_bar_chart.svg new file mode 100644 index 000000000..164a991d5 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_bar_chart.svg @@ -0,0 +1,14 @@ + + + + symbol_bar_chart + Created with Sketch. + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_contact.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_contact.svg new file mode 100644 index 000000000..c15b7f97e --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_contact.svg @@ -0,0 +1,13 @@ + + + + symbol_contact + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_dislike.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_dislike.svg new file mode 100644 index 000000000..90ef2236a --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_dislike.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_drink.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_drink.svg new file mode 100644 index 000000000..19877e505 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_drink.svg @@ -0,0 +1,24 @@ + + + + sym_饮用 + Created with Sketch. + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_exercise.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_exercise.svg new file mode 100644 index 000000000..7b8c5d507 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_exercise.svg @@ -0,0 +1,12 @@ + + + + symbol_exercise + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_flight.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_flight.svg new file mode 100644 index 000000000..eabd93ac2 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_flight.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_heart.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_heart.svg new file mode 100644 index 000000000..57db094c4 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_heart.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_hourglass.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_hourglass.svg new file mode 100644 index 000000000..00df48d0f --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_hourglass.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_like.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_like.svg new file mode 100644 index 000000000..6012c9289 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_like.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_line_graph.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_line_graph.svg new file mode 100644 index 000000000..d4e01b96b --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_line_graph.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_lock.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_lock.svg new file mode 100644 index 000000000..031997450 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_lock.svg @@ -0,0 +1,21 @@ + + + + symbol_lock + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_medals.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_medals.svg new file mode 100644 index 000000000..462f3bac5 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_medals.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_money.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_money.svg new file mode 100644 index 000000000..ede36f2eb --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_money.svg @@ -0,0 +1,20 @@ + + + + symbol_money + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_music.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_music.svg new file mode 100644 index 000000000..ab87ab37c --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_music.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_pen.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_pen.svg new file mode 100644 index 000000000..4f3eaa979 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_pen.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_pie_chart.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_pie_chart.svg new file mode 100644 index 000000000..4a71a5cab --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_pie_chart.svg @@ -0,0 +1,18 @@ + + + + symbol_pie_chart + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_shopping_cart.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_shopping_cart.svg new file mode 100644 index 000000000..c84f529a5 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_shopping_cart.svg @@ -0,0 +1,24 @@ + + + + symbol_shopping_cart + Created with Sketch. + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_telephone.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_telephone.svg new file mode 100644 index 000000000..e26efd906 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_telephone.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_thermometer.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_thermometer.svg new file mode 100644 index 000000000..300fb560d --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_thermometer.svg @@ -0,0 +1,28 @@ + + + + sym_温度计 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/c_symbol_trophy.svg b/public/icons/xmind/markers/symbolMarkers/c_symbol_trophy.svg new file mode 100644 index 000000000..dde0c1f98 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/c_symbol_trophy.svg @@ -0,0 +1,28 @@ + + + + symbol_trophy + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/symbol-100.svg b/public/icons/xmind/markers/symbolMarkers/symbol-100.svg new file mode 100644 index 000000000..0c054bdc6 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/symbol-100.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/symbol-attention.svg b/public/icons/xmind/markers/symbolMarkers/symbol-attention.svg new file mode 100644 index 000000000..bbadb95fc --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/symbol-attention.svg @@ -0,0 +1,27 @@ + + + + symbol_attention@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/symbol-diamond.svg b/public/icons/xmind/markers/symbolMarkers/symbol-diamond.svg new file mode 100644 index 000000000..86fa76a0a --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/symbol-diamond.svg @@ -0,0 +1,24 @@ + + + + symbol_diamond + Created with Sketch. + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/symbol-entertainment.svg b/public/icons/xmind/markers/symbolMarkers/symbol-entertainment.svg new file mode 100644 index 000000000..e48773fde --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/symbol-entertainment.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/symbol-exclam.svg b/public/icons/xmind/markers/symbolMarkers/symbol-exclam.svg new file mode 100644 index 000000000..27cb761c1 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/symbol-exclam.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/symbol-idea.svg b/public/icons/xmind/markers/symbolMarkers/symbol-idea.svg new file mode 100644 index 000000000..499aa621f --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/symbol-idea.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/symbol-info.svg b/public/icons/xmind/markers/symbolMarkers/symbol-info.svg new file mode 100644 index 000000000..5ddd55fb0 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/symbol-info.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/symbol-lightning.svg b/public/icons/xmind/markers/symbolMarkers/symbol-lightning.svg new file mode 100644 index 000000000..c738c5f84 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/symbol-lightning.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/symbol-minus.svg b/public/icons/xmind/markers/symbolMarkers/symbol-minus.svg new file mode 100644 index 000000000..3939cf4b1 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/symbol-minus.svg @@ -0,0 +1,26 @@ + + + + symbol_minus@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/symbol-pause.svg b/public/icons/xmind/markers/symbolMarkers/symbol-pause.svg new file mode 100644 index 000000000..858307e6e --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/symbol-pause.svg @@ -0,0 +1,27 @@ + + + + symbol_pause@16 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/symbol-pin.svg b/public/icons/xmind/markers/symbolMarkers/symbol-pin.svg new file mode 100644 index 000000000..c9ae5dc3b --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/symbol-pin.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/symbol-plus.svg b/public/icons/xmind/markers/symbolMarkers/symbol-plus.svg new file mode 100644 index 000000000..c0a3953fd --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/symbol-plus.svg @@ -0,0 +1,21 @@ + + + + symbol_plus@16 + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/symbol-question.svg b/public/icons/xmind/markers/symbolMarkers/symbol-question.svg new file mode 100644 index 000000000..68cbcfd11 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/symbol-question.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/symbol-right.svg b/public/icons/xmind/markers/symbolMarkers/symbol-right.svg new file mode 100644 index 000000000..847bda337 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/symbol-right.svg @@ -0,0 +1,21 @@ + + + + symbol_right@16 + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/symbol-run.svg b/public/icons/xmind/markers/symbolMarkers/symbol-run.svg new file mode 100644 index 000000000..22db7e23e --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/symbol-run.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/icons/xmind/markers/symbolMarkers/symbol-unlock.svg b/public/icons/xmind/markers/symbolMarkers/symbol-unlock.svg new file mode 100644 index 000000000..b1adc80cc --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/symbol-unlock.svg @@ -0,0 +1,24 @@ + + + + symbol_unlock + Created with Sketch. + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/symbolMarkers/symbol-wrong.svg b/public/icons/xmind/markers/symbolMarkers/symbol-wrong.svg new file mode 100644 index 000000000..411244248 --- /dev/null +++ b/public/icons/xmind/markers/symbolMarkers/symbol-wrong.svg @@ -0,0 +1,21 @@ + + + + symbol_wrong@16 + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/tagMarkers/tag-blue.svg b/public/icons/xmind/markers/tagMarkers/tag-blue.svg new file mode 100644 index 000000000..0435a1a8e --- /dev/null +++ b/public/icons/xmind/markers/tagMarkers/tag-blue.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/tagMarkers/tag-dark-blue.svg b/public/icons/xmind/markers/tagMarkers/tag-dark-blue.svg new file mode 100644 index 000000000..7b19a67da --- /dev/null +++ b/public/icons/xmind/markers/tagMarkers/tag-dark-blue.svg @@ -0,0 +1,12 @@ + + + + color_dark_blue@16 + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/tagMarkers/tag-dark-purple.svg b/public/icons/xmind/markers/tagMarkers/tag-dark-purple.svg new file mode 100644 index 000000000..4fc3ce7c1 --- /dev/null +++ b/public/icons/xmind/markers/tagMarkers/tag-dark-purple.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/tagMarkers/tag-green.svg b/public/icons/xmind/markers/tagMarkers/tag-green.svg new file mode 100644 index 000000000..211a183c2 --- /dev/null +++ b/public/icons/xmind/markers/tagMarkers/tag-green.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/tagMarkers/tag-grey.svg b/public/icons/xmind/markers/tagMarkers/tag-grey.svg new file mode 100644 index 000000000..636bdd933 --- /dev/null +++ b/public/icons/xmind/markers/tagMarkers/tag-grey.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/tagMarkers/tag-orange.svg b/public/icons/xmind/markers/tagMarkers/tag-orange.svg new file mode 100644 index 000000000..ab7a14061 --- /dev/null +++ b/public/icons/xmind/markers/tagMarkers/tag-orange.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/tagMarkers/tag-red.svg b/public/icons/xmind/markers/tagMarkers/tag-red.svg new file mode 100644 index 000000000..a55176e6f --- /dev/null +++ b/public/icons/xmind/markers/tagMarkers/tag-red.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/tagMarkers/tag-yellow.svg b/public/icons/xmind/markers/tagMarkers/tag-yellow.svg new file mode 100644 index 000000000..c73053ee4 --- /dev/null +++ b/public/icons/xmind/markers/tagMarkers/tag-yellow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/xmind/markers/taskMarkers/task-3oct.svg b/public/icons/xmind/markers/taskMarkers/task-3oct.svg new file mode 100644 index 000000000..4796204d1 --- /dev/null +++ b/public/icons/xmind/markers/taskMarkers/task-3oct.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/icons/xmind/markers/taskMarkers/task-3quar.svg b/public/icons/xmind/markers/taskMarkers/task-3quar.svg new file mode 100644 index 000000000..cd21237fe --- /dev/null +++ b/public/icons/xmind/markers/taskMarkers/task-3quar.svg @@ -0,0 +1,17 @@ + + + + task pro_3/4d + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/taskMarkers/task-5oct.svg b/public/icons/xmind/markers/taskMarkers/task-5oct.svg new file mode 100644 index 000000000..beaf92516 --- /dev/null +++ b/public/icons/xmind/markers/taskMarkers/task-5oct.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/icons/xmind/markers/taskMarkers/task-7oct.svg b/public/icons/xmind/markers/taskMarkers/task-7oct.svg new file mode 100644 index 000000000..8ffebada9 --- /dev/null +++ b/public/icons/xmind/markers/taskMarkers/task-7oct.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/icons/xmind/markers/taskMarkers/task-done.svg b/public/icons/xmind/markers/taskMarkers/task-done.svg new file mode 100644 index 000000000..be996f810 --- /dev/null +++ b/public/icons/xmind/markers/taskMarkers/task-done.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/icons/xmind/markers/taskMarkers/task-half.svg b/public/icons/xmind/markers/taskMarkers/task-half.svg new file mode 100644 index 000000000..aa1354bde --- /dev/null +++ b/public/icons/xmind/markers/taskMarkers/task-half.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/icons/xmind/markers/taskMarkers/task-oct.svg b/public/icons/xmind/markers/taskMarkers/task-oct.svg new file mode 100644 index 000000000..0eedc4917 --- /dev/null +++ b/public/icons/xmind/markers/taskMarkers/task-oct.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/icons/xmind/markers/taskMarkers/task-pause.png b/public/icons/xmind/markers/taskMarkers/task-pause.png new file mode 100644 index 000000000..3f981ad26 Binary files /dev/null and b/public/icons/xmind/markers/taskMarkers/task-pause.png differ diff --git a/public/icons/xmind/markers/taskMarkers/task-quarter.svg b/public/icons/xmind/markers/taskMarkers/task-quarter.svg new file mode 100644 index 000000000..744f65686 --- /dev/null +++ b/public/icons/xmind/markers/taskMarkers/task-quarter.svg @@ -0,0 +1,17 @@ + + + + task pro_1/8d copy 3 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/taskMarkers/task-start.svg b/public/icons/xmind/markers/taskMarkers/task-start.svg new file mode 100644 index 000000000..087e7dbcf --- /dev/null +++ b/public/icons/xmind/markers/taskMarkers/task-start.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/icons/xmind/markers/weekMarkers/week-fri.svg b/public/icons/xmind/markers/weekMarkers/week-fri.svg new file mode 100644 index 000000000..7b40fc290 --- /dev/null +++ b/public/icons/xmind/markers/weekMarkers/week-fri.svg @@ -0,0 +1,22 @@ + + + + week_fri@16 + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/weekMarkers/week-mon.svg b/public/icons/xmind/markers/weekMarkers/week-mon.svg new file mode 100644 index 000000000..9042e939a --- /dev/null +++ b/public/icons/xmind/markers/weekMarkers/week-mon.svg @@ -0,0 +1,22 @@ + + + + week_mon@16 + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/weekMarkers/week-sat.svg b/public/icons/xmind/markers/weekMarkers/week-sat.svg new file mode 100644 index 000000000..5534a859a --- /dev/null +++ b/public/icons/xmind/markers/weekMarkers/week-sat.svg @@ -0,0 +1,22 @@ + + + + week_sat@16 + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/weekMarkers/week-sun.svg b/public/icons/xmind/markers/weekMarkers/week-sun.svg new file mode 100644 index 000000000..57fdd64a4 --- /dev/null +++ b/public/icons/xmind/markers/weekMarkers/week-sun.svg @@ -0,0 +1,22 @@ + + + + week_sun@16 + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/weekMarkers/week-thu.svg b/public/icons/xmind/markers/weekMarkers/week-thu.svg new file mode 100644 index 000000000..7042b3197 --- /dev/null +++ b/public/icons/xmind/markers/weekMarkers/week-thu.svg @@ -0,0 +1,22 @@ + + + + week_thu@16 + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/weekMarkers/week-tue.svg b/public/icons/xmind/markers/weekMarkers/week-tue.svg new file mode 100644 index 000000000..bae6a7c97 --- /dev/null +++ b/public/icons/xmind/markers/weekMarkers/week-tue.svg @@ -0,0 +1,22 @@ + + + + week_tue@16 + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/icons/xmind/markers/weekMarkers/week-wed.svg b/public/icons/xmind/markers/weekMarkers/week-wed.svg new file mode 100644 index 000000000..21b6292f4 --- /dev/null +++ b/public/icons/xmind/markers/weekMarkers/week-wed.svg @@ -0,0 +1,22 @@ + + + + week_wed@16 + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/flow-board/image-paste.spec.ts b/tests/flow-board/image-paste.spec.ts index 56f60cf81..682aa2a79 100644 --- a/tests/flow-board/image-paste.spec.ts +++ b/tests/flow-board/image-paste.spec.ts @@ -18,6 +18,7 @@ async function openMap(page: Page) { buffer: await zip.generateAsync({ type: "nodebuffer" }), }); await expect(page.locator(".drawnix").getByText("设计方案", { exact: true })).toBeVisible(); + await page.evaluate(() => document.fonts.ready); } async function writeClipboardImage(page: Page) { @@ -77,8 +78,9 @@ test("selected topic accepts clipboard and Insert image, replacing its single pi await writeClipboardImage(page); await page.keyboard.press("ControlOrMeta+v"); await expect(canvasImages(page)).toHaveCount(1); + const chooserPending = page.waitForEvent("filechooser"); await clickXmindAction(page, "图片"); - await page.locator('input[data-flow-board-shell-control="true"][accept="image/jpeg,image/png,image/webp"]').setInputFiles(picture); + await (await chooserPending).setFiles(picture); await expect(canvasImages(page)).toHaveCount(1); const { sheets } = await exportedSheets(page); expect(sheets[0].rootTopic.children.attached.find((item: { title: string }) => item.title === "设计方案").image).toBeDefined(); diff --git a/tests/flow-board/markers.spec.ts b/tests/flow-board/markers.spec.ts new file mode 100644 index 000000000..2dbd9d9cb --- /dev/null +++ b/tests/flow-board/markers.spec.ts @@ -0,0 +1,109 @@ +import { expect, test, type Page } from "@playwright/test"; +import JSZip from "jszip"; +import { clickXmindAction } from "./editor-actions"; + +async function openMap(page: Page, markers = false) { + await page.goto("/dev/flow-board-preview", { waitUntil: "commit" }); + const zip = new JSZip(); + zip.file("content.json", JSON.stringify([{ title: "标记验证", rootTopic: { + id: "root", title: "项目", children: { attached: [ + { id: "a", title: "设计", ...(markers ? { markers: [{ markerId: "priority-1" }] } : {}) }, + { id: "b", title: "开发", ...(markers ? { markers: [{ markerId: "priority-2" }, { markerId: "unknown-marker" }] } : {}) }, + ] }, + } }])); + await page.locator("input[accept*=xmind]").setInputFiles({ name: "markers.xmind", mimeType: "application/octet-stream", buffer: await zip.generateAsync({ type: "nodebuffer" }) }); + await expect(page.locator(".drawnix").getByText("设计", { exact: true })).toBeVisible(); + await page.getByRole("button", { name: "标记", exact: true }).click(); +} +const markerImages = (page: Page, id?: string) => page.locator(`.drawnix .xmind-topic-marker${id ? `[data-marker-id="${id}"]` : ""}`); +const markerButton = (page: Page, id: string) => page.getByLabel("标记面板", { exact: true }).locator(`button[data-marker-id="${id}"]`); + +test("native marker palette fits the panel and adds, replaces, toggles, clears and undoes", async ({ page }) => { + const errors: string[] = []; + page.on("pageerror", error => errors.push(error.message)); + await openMap(page); + const panel = page.getByLabel("标记面板", { exact: true }); + await expect(page.getByRole("button", { name: "标记", exact: true })).toHaveAttribute("aria-pressed", "true"); + await expect(panel.locator("button[data-marker-id]")).toHaveCount(58); + await expect(panel).toHaveCSS("width", "240px"); + expect(await panel.evaluate(element => element.scrollWidth <= element.clientWidth)).toBe(true); + await page.mouse.click(130, 150); + await expect(markerButton(page, "priority-1")).toBeDisabled(); + await page.locator(".drawnix").getByText("设计", { exact: true }).click(); + await markerButton(page, "priority-1").click(); + await expect(markerImages(page, "priority-1")).toHaveCount(1); + await expect(markerButton(page, "priority-1")).toHaveAttribute("aria-pressed", "true"); + await expect.poll(() => markerImages(page, "priority-1").evaluate((image: HTMLImageElement) => image.complete && image.naturalWidth > 0)).toBe(true); + await markerButton(page, "priority-2").click(); + await expect(markerImages(page, "priority-1")).toHaveCount(0); + await expect(markerImages(page, "priority-2")).toHaveCount(1); + await markerButton(page, "task-half").click(); + await markerButton(page, "flag-green").click(); + await expect(markerImages(page)).toHaveCount(3); + await markerButton(page, "flag-green").click(); + await expect(markerImages(page)).toHaveCount(2); + await panel.getByRole("button", { name: "清空所选节点标记", exact: true }).click(); + await expect(markerImages(page)).toHaveCount(0); + await clickXmindAction(page, "撤销"); + await expect(markerImages(page)).toHaveCount(2); + await expect(markerButton(page, "priority-2")).toHaveAttribute("aria-pressed", "true"); + await expect(markerButton(page, "task-half")).toHaveAttribute("aria-pressed", "true"); + await page.setViewportSize({ width: 800, height: 700 }); + expect(await panel.evaluate(element => element.scrollWidth <= element.clientWidth)).toBe(true); + await page.setViewportSize({ width: 1440, height: 900 }); + await expect(markerImages(page, "priority-2")).toBeVisible(); + await page.screenshot({ path: "test-results/flow-board-ui/marker-panel.png" }); + expect(errors).toEqual([]); +}); + +test("mixed multi-selection applies one value consistently and undo restores the batch", async ({ page }) => { + await openMap(page, true); + const canvas = page.locator(".drawnix"); + await canvas.getByText("设计", { exact: true }).click(); + await canvas.getByText("开发", { exact: true }).click({ modifiers: ["Shift"] }); + await expect(page.getByLabel("标记面板", { exact: true }).getByRole("status")).toHaveText("已选中 2 个主题"); + await expect(markerButton(page, "priority-1")).toHaveAttribute("aria-pressed", "mixed"); + await markerButton(page, "priority-1").click(); + await expect(markerImages(page, "priority-1")).toHaveCount(2); + await expect(markerImages(page, "priority-2")).toHaveCount(0); + await clickXmindAction(page, "撤销"); + await expect(markerImages(page, "priority-1")).toHaveCount(1); + await expect(markerImages(page, "priority-2")).toHaveCount(1); + await clickXmindAction(page, "重做"); + await expect(markerImages(page, "priority-1")).toHaveCount(2); + await expect(markerButton(page, "priority-1")).toHaveAttribute("aria-pressed", "true"); + await page.getByRole("button", { name: "清空所选节点标记", exact: true }).click(); + await expect(markerImages(page)).toHaveCount(0); + const downloadPending = page.waitForEvent("download"); + await page.getByRole("button", { name: "导出 XMind", exact: true }).click(); + const stream = await (await downloadPending).createReadStream(); + const chunks: Buffer[] = []; + for await (const chunk of stream!) chunks.push(chunk); + const zip = await JSZip.loadAsync(Buffer.concat(chunks)); + const sheets = JSON.parse(await zip.file("content.json")!.async("string")); + expect(sheets[0].rootTopic.children.attached.every((topic: { markers?: unknown }) => !topic.markers)).toBe(true); + await clickXmindAction(page, "撤销"); + await expect(markerImages(page, "priority-1")).toHaveCount(2); + await expect(markerButton(page, "priority-1")).toHaveAttribute("aria-pressed", "true"); +}); + +test("search, group collapse and additional installed marker resources are usable", async ({ page }) => { + await openMap(page); + const panel = page.getByLabel("标记面板", { exact: true }); + await page.locator(".drawnix").getByText("设计", { exact: true }).click(); + await panel.getByRole("button", { name: "标签 7", exact: true }).click(); + await expect(markerButton(page, "tag-red")).toHaveCount(0); + await panel.getByLabel("搜索标记").fill("priority-9"); + await expect(panel.locator("button[data-marker-id]")).toHaveCount(1); + await markerButton(page, "priority-9").click(); + await expect(markerImages(page, "priority-9")).toHaveCount(1); + await panel.getByLabel("搜索标记").fill("没有这个标记"); + await expect(panel.getByText("没有匹配的标记", { exact: true })).toBeVisible(); + await panel.getByLabel("搜索标记").fill(""); + await panel.getByRole("button", { name: "标签 7", exact: true }).click(); + await panel.getByRole("button", { name: "更多标记", exact: true }).click(); + await expect(panel.locator("button[data-marker-id]")).toHaveCount(219); + await page.getByRole("button", { name: "关闭标记面板", exact: true }).click(); + await expect(panel).toHaveCount(0); + await expect(page.getByLabel("格式面板", { exact: true })).toBeVisible(); +}); diff --git a/tests/routes/flow-board-markers.test.ts b/tests/routes/flow-board-markers.test.ts new file mode 100644 index 000000000..96360901a --- /dev/null +++ b/tests/routes/flow-board-markers.test.ts @@ -0,0 +1,37 @@ +import { expect, test } from "@playwright/test"; +import JSZip from "jszip"; +import { readFile } from "node:fs/promises"; +import { exportXmind } from "@/lib/flow-board/xmind-export"; +import { importXmind } from "@/lib/flow-board/xmind-import"; +import { getTopicEntries } from "@/lib/flow-board/topic-details"; +import { getXmindMarkerIds, toggleXmindMarker, XMIND_MARKER_GROUPS } from "@/lib/flow-board/xmind-markers"; + +test("all installed marker IDs and artwork exist and round-trip through XMind", async () => { + const markers = XMIND_MARKER_GROUPS.flatMap(group => group.markers); + expect(markers).toHaveLength(219); + expect(new Set(markers.map(marker => marker.id)).size).toBe(197); + expect(XMIND_MARKER_GROUPS.filter(group => !group.hidden).flatMap(group => group.markers.filter(marker => !marker.hidden))).toHaveLength(58); + for (const marker of markers) expect((await readFile(`public${marker.asset}`)).length).toBeGreaterThan(50); + const zip = new JSZip(); + zip.file("content.json", JSON.stringify([{ title: "标记", rootTopic: { + id: "root", title: "全标记验证", children: { attached: markers.map(marker => ({ id: marker.id, title: marker.id, markers: [{ markerId: marker.id }] })) }, + } }])); + const imported = await importXmind(new File([await zip.generateAsync({ type: "uint8array" })], "markers.xmind"), "标记"); + const entries = getTopicEntries(imported.sheets[0].children).slice(1); + expect(entries.map(entry => getXmindMarkerIds(entry.element.data.emojis)[0])).toEqual(markers.map(marker => marker.id)); + expect(imported.warnings).not.toContain("部分图标已保留为数据,暂不显示"); + const exported = await exportXmind({ children: imported.sheets[0].children }, "标记"); + const output = await JSZip.loadAsync(await exported.blob.arrayBuffer()); + const sheets = JSON.parse(await output.file("content.json")!.async("string")); + expect(sheets[0].rootTopic.children.attached.map((topic: { markers: { markerId: string }[] }) => topic.markers[0].markerId)).toEqual(markers.map(marker => marker.id)); + expect(exported.warnings).toEqual([]); +}); + +test("legacy emoji markers replace within their group and preserve other groups and custom emoji", () => { + const original = [{ name: "1️⃣" }, { name: "✅" }, { name: "🦄" }]; + const replaced = toggleXmindMarker(original, "priority-2", false); + expect(getXmindMarkerIds(replaced)).toEqual(["task-done", "priority-2"]); + expect(replaced).toContainEqual({ name: "🦄" }); + expect(getXmindMarkerIds(toggleXmindMarker(replaced, "priority-2", true))).toEqual(["task-done"]); + expect(original).toEqual([{ name: "1️⃣" }, { name: "✅" }, { name: "🦄" }]); +});