From b0c818ee5670719cf7c556500a478a3b590bb31d Mon Sep 17 00:00:00 2001 From: tianma-if Date: Mon, 21 Sep 2026 19:40:36 +0800 Subject: [PATCH] feat(diagram): optimize architecture resource icons and add hardware components --- .../src/components/DiagramEditorPane.test.mjs | 7 +- apps/web/src/components/DiagramEditorPane.tsx | 278 ++++++++++++++++-- .../shared/src/diagram-architecture-icons.ts | 113 +++---- .../shared/src/diagram-architecture-style.ts | 2 +- packages/shared/src/diagram.ts | 2 +- packages/shared/src/i18n/en-US.ts | 5 + packages/shared/src/i18n/ja.ts | 5 + packages/shared/src/i18n/zh-CN.ts | 5 + 8 files changed, 330 insertions(+), 87 deletions(-) diff --git a/apps/web/src/components/DiagramEditorPane.test.mjs b/apps/web/src/components/DiagramEditorPane.test.mjs index 39e169d2..f18756e0 100644 --- a/apps/web/src/components/DiagramEditorPane.test.mjs +++ b/apps/web/src/components/DiagramEditorPane.test.mjs @@ -336,7 +336,12 @@ describe("diagram editor canvas surface", () => { expect(source).toContain('resourceIcon: architectureResourceIcon(item)'); expect(source).toContain('...(data?.resourceIcon ? { resourceIcon: data.resourceIcon } : {})'); expect(source).toContain('architectureNodeVisual(node.shape, appearance, size, node.resourceIcon)'); - expect(source).toContain('inferArchitectureResourceIcon(node.label, t)'); + expect(source).toContain('labelKey: "diagram.architectureResources.gpu"'); + expect(source).toContain('labelKey: "diagram.architectureResources.cpu"'); + expect(source).toContain('labelKey: "diagram.architectureResources.memory"'); + expect(source).toContain("ARCHITECTURE_RESOURCE_ALIASES"); + expect(source).toContain(" const ARCHITECTURE_LIBRARY_ITEMS = ARCHITECTURE_LIBRARY_CATEGORIES.flatMap((category) => category.items); +const ARCHITECTURE_RESOURCE_ALIASES: Array<{ + pattern: RegExp; + icon: ArchitectureResourceIcon; +}> = [ + { pattern: /\b(gpu|cuda|vram|graphics|显卡)\b|独立\s*gpu|gpu\s*核心|核显/i, icon: "gpu" }, + { pattern: /\b(cpu|soc|processor|core)\b|cpu\s*核心|中央处理器|处理器/i, icon: "cpu" }, + { pattern: /\b(memory|ram|vram|ddr|dram|unified\s*memory)\b|内存|统一内存|显存/i, icon: "memory" }, + { pattern: /\b(k8s|kubernetes|kube)\b/i, icon: "kubernetes" }, + { pattern: /\b(redis|memcached|cache)\b|缓存/i, icon: "cache" }, + { pattern: /\b(kafka|rabbitmq|rocketmq|activemq|pulsar|sqs|queue|mq)\b|消息队列/i, icon: "messageQueue" }, + { pattern: /\b(mysql|postgres|postgresql|oracle|sqlite|mariadb|db)\b|关系型数据库|数据库/i, icon: "relationalDatabase" }, + { pattern: /\b(mongo|mongodb|dynamodb|cassandra|couchbase|nosql)\b/i, icon: "noSqlDatabase" }, + { pattern: /\b(milvus|pinecone|qdrant|chroma|weaviate|vector)\b|向量/i, icon: "vectorDatabase" }, + { pattern: /\b(kong|apisix|gateway|zuul)\b|网关|api\s*网关/i, icon: "apiGateway" }, + { pattern: /\b(nginx|haproxy|alb|nlb|slb|load\s*balancer)\b|负载均衡/i, icon: "loadBalancer" }, + { pattern: /\b(docker|container|pod)\b|容器/i, icon: "container" }, + { pattern: /\b(llm|gpt|claude|gemini|deepseek|qwen|openai)\b|大模型|语言模型/i, icon: "largeLanguageModel" }, + { pattern: /\b(agent)\b|智能体/i, icon: "aiAgent" }, + { pattern: /\b(elasticsearch|es|opensearch|solr|meilisearch)\b|搜索/i, icon: "searchEngine" }, + { pattern: /\b(cdn|cloudflare|akamai)\b/i, icon: "cdn" }, + { pattern: /\b(dns|route53)\b/i, icon: "dns" }, + { pattern: /\b(lambda|serverless|faas|function)\b|函数/i, icon: "serverless" }, + { pattern: /\b(prometheus|grafana|datadog)\b|监控/i, icon: "monitoring" }, + { pattern: /\b(loki|elk|fluentd|logstash)\b|日志/i, icon: "logging" }, + { pattern: /\b(jaeger|zipkin|opentelemetry|otel|tracing)\b|链路追踪/i, icon: "tracing" }, + { pattern: /\b(s3|oss|cos|minio|blob)\b|对象存储/i, icon: "objectStorage" }, + { pattern: /\b(web|frontend|react|vue|angular|h5)\b|前端/i, icon: "webApp" }, + { pattern: /\b(app|ios|android|mobile|flutter|react\s*native)\b|移动端/i, icon: "mobileApp" }, + { pattern: /\b(service|microservice|backend|server)\b|服务|后端/i, icon: "service" }, +]; + const inferArchitectureResourceIcon = ( label: string, t: (key: string) => string, ) => { - const item = ARCHITECTURE_LIBRARY_ITEMS.find((candidate) => t(candidate.labelKey) === label); - return item ? architectureResourceIcon(item) : undefined; + const trimmed = label.trim(); + const directItem = ARCHITECTURE_LIBRARY_ITEMS.find((candidate) => ( + t(candidate.labelKey).toLowerCase() === trimmed.toLowerCase() + || architectureResourceIcon(candidate).toLowerCase() === trimmed.toLowerCase() + )); + if (directItem) return architectureResourceIcon(directItem); + const aliasMatch = ARCHITECTURE_RESOURCE_ALIASES.find((entry) => entry.pattern.test(trimmed)); + return aliasMatch ? aliasMatch.icon : undefined; }; const isArchitectureLibraryDrag = (event: ReactDragEvent) => { @@ -479,6 +535,119 @@ const ArchitectureComponentLibrary = ({ ); }; +const ArchitectureIconPicker = ({ + currentIcon, + onSelectIcon, + t, +}: { + currentIcon: ArchitectureResourceIcon; + onSelectIcon: (icon: ArchitectureResourceIcon) => void; + t: (key: string) => string; +}) => { + const [open, setOpen] = useState(false); + const [query, setQuery] = useState(""); + const normalizedQuery = query.trim().toLocaleLowerCase(); + const categories = ARCHITECTURE_LIBRARY_CATEGORIES.map((category) => ({ + ...category, + items: category.items.filter((item) => t(item.labelKey).toLocaleLowerCase().includes(normalizedQuery)), + })).filter((category) => category.items.length > 0); + + const CurrentLucide = ARCHITECTURE_LIBRARY_ITEMS.find( + (item) => architectureResourceIcon(item) === currentIcon, + )?.icon ?? Server; + + return ( + { + setOpen(nextOpen); + if (!nextOpen) setQuery(""); + }}> + + + + + + + +
{t("diagram.changeNodeIcon")}
+
+
+ +
+
+ + setQuery(event.target.value)} + onKeyDown={(event) => event.stopPropagation()} + /> +
+
+
+ {categories.length > 0 ? categories.map((category) => ( + + event.preventDefault()}> + + + {t(category.labelKey)} + + + +
+ {category.items.map((item) => { + const Icon = item.icon; + const resIcon = architectureResourceIcon(item); + const label = t(item.labelKey); + const isSelected = resIcon === currentIcon; + return ( + + + { + onSelectIcon(resIcon); + setOpen(false); + }} + > + + + + +
{label}
+
+
+ ); + })} +
+
+
+ )) : ( +
{t("diagram.noMatchingComponents")}
+ )} +
+
+
+ ); +}; + const DiagramInsertMenu = ({ items, }: { @@ -2346,8 +2515,41 @@ export const DiagramEditorPane = ({ setSelectedNodeLabel(label); const node = selectedNodeId ? graphRef.current?.getCellById(selectedNodeId) : null; if (!node?.isNode() || readOnly) return; - node.setData({ ...node.getData(), label }); + const data = node.getData(); + const isArchitecture = document?.kind === "architecture"; + let nextResourceIcon = data?.resourceIcon; + if (isArchitecture) { + const inferred = inferArchitectureResourceIcon(label, t); + if (inferred && inferred !== data?.resourceIcon) { + nextResourceIcon = inferred; + } + } + node.setData({ ...data, label, ...(nextResourceIcon ? { resourceIcon: nextResourceIcon } : {}) }); refreshNodeLabel(node, label); + if (isArchitecture && nextResourceIcon && nextResourceIcon !== data?.resourceIcon) { + const shape = data?.shape ?? "service"; + const visual = architectureNodeVisual(shape, appearanceRef.current, node.getSize(), nextResourceIcon); + node.setMarkup(visual.markup); + node.replaceAttrs({ + body: visual.body, + label: { ...visual.label, text: label }, + ...visual.attrs, + }); + } + }; + + const updateSelectedResourceIcon = (resourceIcon: ArchitectureResourceIcon) => { + const node = selectedNodeId ? graphRef.current?.getCellById(selectedNodeId) : null; + if (!node?.isNode() || readOnly || document?.kind !== "architecture") return; + const data = node.getData() ?? { label: "", shape: "service" }; + node.setData({ ...data, resourceIcon }); + const visual = architectureNodeVisual(data.shape, appearanceRef.current, node.getSize(), resourceIcon); + node.setMarkup(visual.markup); + node.replaceAttrs({ + body: visual.body, + label: { ...visual.label, text: node.attr("label/text") ?? data.label }, + ...visual.attrs, + }); }; const updateSelectedEdgeLabel = (label: string) => { @@ -2977,12 +3179,30 @@ export const DiagramEditorPane = ({ readOnly={readOnly} selectionEditor={( <> - {selectedNodeId && !readOnly && ( -
- {t("diagram.nodeText")} - updateSelectedLabel(event.target.value)} /> -
- )} + {selectedNodeId && !readOnly && (() => { + const selectedNode = graphRef.current?.getCellById(selectedNodeId); + const selectedData = selectedNode?.isNode() ? selectedNode.getData() : undefined; + const isArchitecture = document?.kind === "architecture"; + const isArchitectureComponent = isArchitecture && selectedData?.shape !== "boundary"; + const selectedIcon: ArchitectureResourceIcon = selectedData?.resourceIcon + ?? (selectedData?.shape && ARCHITECTURE_COMPONENT_SHAPES.includes(selectedData.shape as ArchitectureComponentShape) + ? ARCHITECTURE_SHAPE_RESOURCE[selectedData.shape as ArchitectureComponentShape] + : "service"); + + return ( +
+ {isArchitectureComponent && ( + + )} + {t("diagram.nodeText")} + updateSelectedLabel(event.target.value)} /> +
+ ); + })()} {selectedEdgeId && !readOnly && (
{t("diagram.edgeText")} diff --git a/packages/shared/src/diagram-architecture-icons.ts b/packages/shared/src/diagram-architecture-icons.ts index de381cb7..f6f2e1bd 100644 --- a/packages/shared/src/diagram-architecture-icons.ts +++ b/packages/shared/src/diagram-architecture-icons.ts @@ -8,59 +8,62 @@ export type ArchitectureIconElement = { }; export const ARCHITECTURE_RESOURCE_ICON_ELEMENTS: Record = { - client: [{ tagName: "path", attrs: { d: "M18 8V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h8" } }, { tagName: "path", attrs: { d: "M10 19v-3.96 3.15" } }, { tagName: "path", attrs: { d: "M7 19h5" } }, { tagName: "rect", attrs: { width: "6", height: "10", x: "16", y: "12", rx: "2" } }], - webApp: [{ tagName: "rect", attrs: { x: "2", y: "4", width: "20", height: "16", rx: "2" } }, { tagName: "path", attrs: { d: "M10 4v4" } }, { tagName: "path", attrs: { d: "M2 8h20" } }, { tagName: "path", attrs: { d: "M6 4v4" } }], - mobileApp: [{ tagName: "rect", attrs: { width: "14", height: "20", x: "5", y: "2", rx: "2", ry: "2" } }, { tagName: "path", attrs: { d: "M12 18h.01" } }], - website: [{ tagName: "path", attrs: { d: "M21.54 15H17a2 2 0 0 0-2 2v4.54" } }, { tagName: "path", attrs: { d: "M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17" } }, { tagName: "path", attrs: { d: "M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05" } }, { tagName: "circle", attrs: { cx: "12", cy: "12", r: "10" } }], - apiClient: [{ tagName: "path", attrs: { d: "m18 16 4-4-4-4" } }, { tagName: "path", attrs: { d: "m6 8-4 4 4 4" } }, { tagName: "path", attrs: { d: "m14.5 4-5 16" } }], - service: [{ tagName: "rect", attrs: { width: "20", height: "8", x: "2", y: "2", rx: "2", ry: "2" } }, { tagName: "rect", attrs: { width: "20", height: "8", x: "2", y: "14", rx: "2", ry: "2" } }, { tagName: "line", attrs: { x1: "6", x2: "6.01", y1: "6", y2: "6" } }, { tagName: "line", attrs: { x1: "6", x2: "6.01", y1: "18", y2: "18" } }], - virtualMachine: [{ tagName: "path", attrs: { d: "M12 20v2" } }, { tagName: "path", attrs: { d: "M12 2v2" } }, { tagName: "path", attrs: { d: "M17 20v2" } }, { tagName: "path", attrs: { d: "M17 2v2" } }, { tagName: "path", attrs: { d: "M2 12h2" } }, { tagName: "path", attrs: { d: "M2 17h2" } }, { tagName: "path", attrs: { d: "M2 7h2" } }, { tagName: "path", attrs: { d: "M20 12h2" } }, { tagName: "path", attrs: { d: "M20 17h2" } }, { tagName: "path", attrs: { d: "M20 7h2" } }, { tagName: "path", attrs: { d: "M7 20v2" } }, { tagName: "path", attrs: { d: "M7 2v2" } }, { tagName: "rect", attrs: { x: "4", y: "4", width: "16", height: "16", rx: "2" } }, { tagName: "rect", attrs: { x: "8", y: "8", width: "8", height: "8", rx: "1" } }], - container: [{ tagName: "path", attrs: { d: "M22 7.7c0-.6-.4-1.2-.8-1.5l-6.3-3.9a1.72 1.72 0 0 0-1.7 0l-10.3 6c-.5.2-.9.8-.9 1.4v6.6c0 .5.4 1.2.8 1.5l6.3 3.9a1.72 1.72 0 0 0 1.7 0l10.3-6c.5-.3.9-1 .9-1.5Z" } }, { tagName: "path", attrs: { d: "M10 21.9V14L2.1 9.1" } }, { tagName: "path", attrs: { d: "m10 14 11.9-6.9" } }, { tagName: "path", attrs: { d: "M14 19.8v-8.1" } }, { tagName: "path", attrs: { d: "M18 17.5V9.4" } }], - kubernetes: [{ tagName: "path", attrs: { d: "M10 22V7a1 1 0 0 0-1-1H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5a1 1 0 0 0-1-1H2" } }, { tagName: "rect", attrs: { x: "14", y: "2", width: "8", height: "8", rx: "1" } }], - serverless: [{ tagName: "rect", attrs: { width: "18", height: "18", x: "3", y: "3", rx: "2", ry: "2" } }, { tagName: "path", attrs: { d: "M9 17c2 0 2.8-1 2.8-2.8V10c0-2 1-3.3 3.2-3" } }, { tagName: "path", attrs: { d: "M9 11.2h5.7" } }], - largeLanguageModel: [{ tagName: "path", attrs: { d: "M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z" } }, { tagName: "path", attrs: { d: "M9 13a4.5 4.5 0 0 0 3-4" } }, { tagName: "path", attrs: { d: "M6.003 5.125A3 3 0 0 0 6.401 6.5" } }, { tagName: "path", attrs: { d: "M3.477 10.896a4 4 0 0 1 .585-.396" } }, { tagName: "path", attrs: { d: "M6 18a4 4 0 0 1-1.967-.516" } }, { tagName: "path", attrs: { d: "M12 13h4" } }, { tagName: "path", attrs: { d: "M12 18h6a2 2 0 0 1 2 2v1" } }, { tagName: "path", attrs: { d: "M12 8h8" } }, { tagName: "path", attrs: { d: "M16 8V5a2 2 0 0 1 2-2" } }, { tagName: "circle", attrs: { cx: "16", cy: "13", r: ".5" } }, { tagName: "circle", attrs: { cx: "18", cy: "3", r: ".5" } }, { tagName: "circle", attrs: { cx: "20", cy: "21", r: ".5" } }, { tagName: "circle", attrs: { cx: "20", cy: "8", r: ".5" } }], - multimodalModel: [{ tagName: "path", attrs: { d: "M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z" } }, { tagName: "path", attrs: { d: "M20 2v4" } }, { tagName: "path", attrs: { d: "M22 4h-4" } }, { tagName: "circle", attrs: { cx: "4", cy: "20", r: "2" } }], - embeddingModel: [{ tagName: "rect", attrs: { x: "14", y: "14", width: "4", height: "6", rx: "2" } }, { tagName: "rect", attrs: { x: "6", y: "4", width: "4", height: "6", rx: "2" } }, { tagName: "path", attrs: { d: "M6 20h4" } }, { tagName: "path", attrs: { d: "M14 10h4" } }, { tagName: "path", attrs: { d: "M6 14h2v6" } }, { tagName: "path", attrs: { d: "M14 4h2v6" } }], - reranker: [{ tagName: "path", attrs: { d: "m3 16 4 4 4-4" } }, { tagName: "path", attrs: { d: "M7 20V4" } }, { tagName: "path", attrs: { d: "m21 8-4-4-4 4" } }, { tagName: "path", attrs: { d: "M17 4v16" } }], - modelInference: [{ tagName: "path", attrs: { d: "M12 20v2" } }, { tagName: "path", attrs: { d: "M12 2v2" } }, { tagName: "path", attrs: { d: "M17 20v2" } }, { tagName: "path", attrs: { d: "M17 2v2" } }, { tagName: "path", attrs: { d: "M2 12h2" } }, { tagName: "path", attrs: { d: "M2 17h2" } }, { tagName: "path", attrs: { d: "M2 7h2" } }, { tagName: "path", attrs: { d: "M20 12h2" } }, { tagName: "path", attrs: { d: "M20 17h2" } }, { tagName: "path", attrs: { d: "M20 7h2" } }, { tagName: "path", attrs: { d: "M7 20v2" } }, { tagName: "path", attrs: { d: "M7 2v2" } }, { tagName: "rect", attrs: { x: "4", y: "4", width: "16", height: "16", rx: "2" } }, { tagName: "rect", attrs: { x: "8", y: "8", width: "8", height: "8", rx: "1" } }], - vectorDatabase: [{ tagName: "ellipse", attrs: { cx: "12", cy: "5", rx: "9", ry: "3" } }, { tagName: "path", attrs: { d: "M3 5V19A9 3 0 0 0 15 21.84" } }, { tagName: "path", attrs: { d: "M21 5V8" } }, { tagName: "path", attrs: { d: "M21 12L18 17H22L19 22" } }, { tagName: "path", attrs: { d: "M3 12A9 3 0 0 0 14.59 14.87" } }], - ragPipeline: [{ tagName: "rect", attrs: { width: "8", height: "8", x: "3", y: "3", rx: "2" } }, { tagName: "path", attrs: { d: "M7 11v4a2 2 0 0 0 2 2h4" } }, { tagName: "rect", attrs: { width: "8", height: "8", x: "13", y: "13", rx: "2" } }], - aiAgent: [{ tagName: "path", attrs: { d: "M12 8V4H8" } }, { tagName: "rect", attrs: { width: "16", height: "12", x: "4", y: "8", rx: "2" } }, { tagName: "path", attrs: { d: "M2 14h2" } }, { tagName: "path", attrs: { d: "M20 14h2" } }, { tagName: "path", attrs: { d: "M15 13v2" } }, { tagName: "path", attrs: { d: "M9 13v2" } }], - modelGateway: [{ tagName: "rect", attrs: { width: "20", height: "8", x: "2", y: "14", rx: "2" } }, { tagName: "path", attrs: { d: "M6.01 18H6" } }, { tagName: "path", attrs: { d: "M10.01 18H10" } }, { tagName: "path", attrs: { d: "M15 10v4" } }, { tagName: "path", attrs: { d: "M17.84 7.17a4 4 0 0 0-5.66 0" } }, { tagName: "path", attrs: { d: "M20.66 4.34a8 8 0 0 0-11.31 0" } }], - mcpServer: [{ tagName: "path", attrs: { d: "M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z" } }, { tagName: "path", attrs: { d: "m2 22 3-3" } }, { tagName: "path", attrs: { d: "M7.5 13.5 10 11" } }, { tagName: "path", attrs: { d: "M10.5 16.5 13 14" } }, { tagName: "path", attrs: { d: "m18 3-4 4h6l-4 4" } }], - relationalDatabase: [{ tagName: "ellipse", attrs: { cx: "12", cy: "5", rx: "9", ry: "3" } }, { tagName: "path", attrs: { d: "M3 5V19A9 3 0 0 0 21 19V5" } }, { tagName: "path", attrs: { d: "M3 12A9 3 0 0 0 21 12" } }], - noSqlDatabase: [{ tagName: "ellipse", attrs: { cx: "12", cy: "5", rx: "9", ry: "3" } }, { tagName: "path", attrs: { d: "M3 5V19A9 3 0 0 0 15 21.84" } }, { tagName: "path", attrs: { d: "M21 5V8" } }, { tagName: "path", attrs: { d: "M21 12L18 17H22L19 22" } }, { tagName: "path", attrs: { d: "M3 12A9 3 0 0 0 14.59 14.87" } }], - cache: [{ tagName: "path", attrs: { d: "M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z" } }, { tagName: "path", attrs: { d: "M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12" } }, { tagName: "path", attrs: { d: "M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17" } }], - dataWarehouse: [{ tagName: "path", attrs: { d: "M12 16v5" } }, { tagName: "path", attrs: { d: "M16 14.639V21" } }, { tagName: "path", attrs: { d: "M20 10.656V21" } }, { tagName: "path", attrs: { d: "m22 3-8.646 8.646a.5.5 0 0 1-.708 0L9.354 8.354a.5.5 0 0 0-.707 0L2 15" } }, { tagName: "path", attrs: { d: "M4 18.463V21" } }, { tagName: "path", attrs: { d: "M8 14.656V21" } }], - searchEngine: [{ tagName: "path", attrs: { d: "m21 21-4.34-4.34" } }, { tagName: "circle", attrs: { cx: "11", cy: "11", r: "8" } }], - objectStorage: [{ tagName: "path", attrs: { d: "M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z" } }], - fileStorage: [{ tagName: "path", attrs: { d: "M11 21a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1" } }, { tagName: "path", attrs: { d: "M16 16a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1" } }, { tagName: "path", attrs: { d: "M21 6a2 2 0 0 0-.586-1.414l-2-2A2 2 0 0 0 17 2h-3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1z" } }], - blockStorage: [{ tagName: "path", attrs: { d: "M10 16h.01" } }, { tagName: "path", attrs: { d: "M2.212 11.577a2 2 0 0 0-.212.896V18a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5.527a2 2 0 0 0-.212-.896L18.55 5.11A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z" } }, { tagName: "path", attrs: { d: "M21.946 12.013H2.054" } }, { tagName: "path", attrs: { d: "M6 16h.01" } }], - backup: [{ tagName: "circle", attrs: { cx: "15", cy: "19", r: "2" } }, { tagName: "path", attrs: { d: "M20.9 19.8A2 2 0 0 0 22 18V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2h5.1" } }, { tagName: "path", attrs: { d: "M15 11v-1" } }, { tagName: "path", attrs: { d: "M15 17v-2" } }], - cdn: [{ tagName: "path", attrs: { d: "M12 13v8" } }, { tagName: "path", attrs: { d: "M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242" } }, { tagName: "path", attrs: { d: "m8 17 4-4 4 4" } }], - messageQueue: [{ tagName: "path", attrs: { d: "M15 6a9 9 0 0 0-9 9V3" } }, { tagName: "circle", attrs: { cx: "18", cy: "6", r: "3" } }, { tagName: "circle", attrs: { cx: "6", cy: "18", r: "3" } }], - eventBus: [{ tagName: "rect", attrs: { width: "8", height: "8", x: "3", y: "3", rx: "2" } }, { tagName: "path", attrs: { d: "M7 11v4a2 2 0 0 0 2 2h4" } }, { tagName: "rect", attrs: { width: "8", height: "8", x: "13", y: "13", rx: "2" } }], - streamProcessing: [{ tagName: "path", attrs: { d: "M4.9 16.1C1 12.2 1 5.8 4.9 1.9" } }, { tagName: "path", attrs: { d: "M7.8 4.7a6.14 6.14 0 0 0-.8 7.5" } }, { tagName: "circle", attrs: { cx: "12", cy: "9", r: "2" } }, { tagName: "path", attrs: { d: "M16.2 4.8c2 2 2.26 5.11.8 7.47" } }, { tagName: "path", attrs: { d: "M19.1 1.9a9.96 9.96 0 0 1 0 14.1" } }, { tagName: "path", attrs: { d: "M9.5 18h5" } }, { tagName: "path", attrs: { d: "m8 22 4-11 4 11" } }], - webhook: [{ tagName: "path", attrs: { d: "M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2" } }, { tagName: "path", attrs: { d: "m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06" } }, { tagName: "path", attrs: { d: "m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8" } }], - serviceMesh: [{ tagName: "path", attrs: { d: "M8 5h13" } }, { tagName: "path", attrs: { d: "M13 12h8" } }, { tagName: "path", attrs: { d: "M13 19h8" } }, { tagName: "path", attrs: { d: "M3 10a2 2 0 0 0 2 2h3" } }, { tagName: "path", attrs: { d: "M3 5v12a2 2 0 0 0 2 2h3" } }], - apiGateway: [{ tagName: "rect", attrs: { width: "20", height: "8", x: "2", y: "14", rx: "2" } }, { tagName: "path", attrs: { d: "M6.01 18H6" } }, { tagName: "path", attrs: { d: "M10.01 18H10" } }, { tagName: "path", attrs: { d: "M15 10v4" } }, { tagName: "path", attrs: { d: "M17.84 7.17a4 4 0 0 0-5.66 0" } }, { tagName: "path", attrs: { d: "M20.66 4.34a8 8 0 0 0-11.31 0" } }], - loadBalancer: [{ tagName: "path", attrs: { d: "M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2" } }], - dns: [{ tagName: "path", attrs: { d: "M21.54 15H17a2 2 0 0 0-2 2v4.54" } }, { tagName: "path", attrs: { d: "M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17" } }, { tagName: "path", attrs: { d: "M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05" } }, { tagName: "circle", attrs: { cx: "12", cy: "12", r: "10" } }], - vpc: [{ tagName: "rect", attrs: { x: "16", y: "16", width: "6", height: "6", rx: "1" } }, { tagName: "rect", attrs: { x: "2", y: "16", width: "6", height: "6", rx: "1" } }, { tagName: "rect", attrs: { x: "9", y: "2", width: "6", height: "6", rx: "1" } }, { tagName: "path", attrs: { d: "M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3" } }, { tagName: "path", attrs: { d: "M12 12V8" } }], - subnet: [{ tagName: "path", attrs: { d: "M17 19a1 1 0 0 1-1-1v-2a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2a1 1 0 0 1-1 1z" } }, { tagName: "path", attrs: { d: "M17 21v-2" } }, { tagName: "path", attrs: { d: "M19 14V6.5a1 1 0 0 0-7 0v11a1 1 0 0 1-7 0V10" } }, { tagName: "path", attrs: { d: "M21 21v-2" } }, { tagName: "path", attrs: { d: "M3 5V3" } }, { tagName: "path", attrs: { d: "M4 10a2 2 0 0 1-2-2V6a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2a2 2 0 0 1-2 2z" } }, { tagName: "path", attrs: { d: "M7 5V3" } }], - vpn: [{ tagName: "path", attrs: { d: "m15 20 3-3h2a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h2l3 3z" } }, { tagName: "path", attrs: { d: "M6 8v1" } }, { tagName: "path", attrs: { d: "M10 8v1" } }, { tagName: "path", attrs: { d: "M14 8v1" } }, { tagName: "path", attrs: { d: "M18 8v1" } }], - identity: [{ tagName: "path", attrs: { d: "M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z" } }, { tagName: "circle", attrs: { cx: "16.5", cy: "7.5", r: ".5", fill: "currentColor" } }], - firewall: [{ tagName: "rect", attrs: { width: "18", height: "18", x: "3", y: "3", rx: "2" } }, { tagName: "path", attrs: { d: "M12 9v6" } }, { tagName: "path", attrs: { d: "M16 15v6" } }, { tagName: "path", attrs: { d: "M16 3v6" } }, { tagName: "path", attrs: { d: "M3 15h18" } }, { tagName: "path", attrs: { d: "M3 9h18" } }, { tagName: "path", attrs: { d: "M8 15v6" } }, { tagName: "path", attrs: { d: "M8 3v6" } }], - waf: [{ tagName: "path", attrs: { d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" } }, { tagName: "path", attrs: { d: "m9 12 2 2 4-4" } }], - secretManager: [{ tagName: "circle", attrs: { cx: "12", cy: "16", r: "1" } }, { tagName: "rect", attrs: { x: "3", y: "10", width: "18", height: "12", rx: "2" } }, { tagName: "path", attrs: { d: "M7 10V7a5 5 0 0 1 10 0v3" } }], - certificate: [{ tagName: "path", attrs: { d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" } }, { tagName: "path", attrs: { d: "M8 12h.01" } }, { tagName: "path", attrs: { d: "M12 12h.01" } }, { tagName: "path", attrs: { d: "M16 12h.01" } }], - systemBoundary: [{ tagName: "path", attrs: { d: "M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z" } }, { tagName: "path", attrs: { d: "m3.3 7 8.7 5 8.7-5" } }, { tagName: "path", attrs: { d: "M12 22V12" } }], - monitoring: [{ tagName: "path", attrs: { d: "m12 14 4-4" } }, { tagName: "path", attrs: { d: "M3.34 19a10 10 0 1 1 17.32 0" } }], - logging: [{ tagName: "path", attrs: { d: "M16 22h2a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v2.85" } }, { tagName: "path", attrs: { d: "M14 2v5a1 1 0 0 0 1 1h5" } }, { tagName: "path", attrs: { d: "M8 14v2.2l1.6 1" } }, { tagName: "circle", attrs: { cx: "8", cy: "16", r: "6" } }], - metrics: [{ tagName: "path", attrs: { d: "M12 16v5" } }, { tagName: "path", attrs: { d: "M16 14.639V21" } }, { tagName: "path", attrs: { d: "M20 10.656V21" } }, { tagName: "path", attrs: { d: "m22 3-8.646 8.646a.5.5 0 0 1-.708 0L9.354 8.354a.5.5 0 0 0-.707 0L2 15" } }, { tagName: "path", attrs: { d: "M4 18.463V21" } }, { tagName: "path", attrs: { d: "M8 14.656V21" } }], - tracing: [{ tagName: "path", attrs: { d: "M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2" } }], - alerting: [{ tagName: "circle", attrs: { cx: "12", cy: "12", r: "10" } }, { tagName: "line", attrs: { x1: "12", x2: "12", y1: "8", y2: "12" } }, { tagName: "line", attrs: { x1: "12", x2: "12.01", y1: "16", y2: "16" } }], - saas: [{ tagName: "path", attrs: { d: "m10.852 19.772-.383.924" } }, { tagName: "path", attrs: { d: "m13.148 14.228.383-.923" } }, { tagName: "path", attrs: { d: "M13.148 19.772a3 3 0 1 0-2.296-5.544l-.383-.923" } }, { tagName: "path", attrs: { d: "m13.53 20.696-.382-.924a3 3 0 1 1-2.296-5.544" } }, { tagName: "path", attrs: { d: "m14.772 15.852.923-.383" } }, { tagName: "path", attrs: { d: "m14.772 18.148.923.383" } }, { tagName: "path", attrs: { d: "M4.2 15.1a7 7 0 1 1 9.93-9.858A7 7 0 0 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.2" } }, { tagName: "path", attrs: { d: "m9.228 15.852-.923-.383" } }, { tagName: "path", attrs: { d: "m9.228 18.148-.923.383" } }], - externalApi: [{ tagName: "path", attrs: { d: "M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2" } }, { tagName: "path", attrs: { d: "m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06" } }, { tagName: "path", attrs: { d: "m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8" } }], - thirdPartyService: [{ tagName: "path", attrs: { d: "M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z" } }], + client: [{"tagName":"path","attrs":{"d":"M18 8V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h8"}},{"tagName":"path","attrs":{"d":"M10 19v-3.96 3.15"}},{"tagName":"path","attrs":{"d":"M7 19h5"}},{"tagName":"rect","attrs":{"width":"6","height":"10","x":"16","y":"12","rx":"2"}}], + webApp: [{"tagName":"rect","attrs":{"x":"2","y":"4","width":"20","height":"16","rx":"2"}},{"tagName":"path","attrs":{"d":"M10 4v4"}},{"tagName":"path","attrs":{"d":"M2 8h20"}},{"tagName":"path","attrs":{"d":"M6 4v4"}}], + mobileApp: [{"tagName":"rect","attrs":{"width":"14","height":"20","x":"5","y":"2","rx":"2","ry":"2"}},{"tagName":"path","attrs":{"d":"M12 18h.01"}}], + website: [{"tagName":"path","attrs":{"d":"M21.54 15H17a2 2 0 0 0-2 2v4.54"}},{"tagName":"path","attrs":{"d":"M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17"}},{"tagName":"path","attrs":{"d":"M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05"}},{"tagName":"circle","attrs":{"cx":"12","cy":"12","r":"10"}}], + apiClient: [{"tagName":"path","attrs":{"d":"m18 16 4-4-4-4"}},{"tagName":"path","attrs":{"d":"m6 8-4 4 4 4"}},{"tagName":"path","attrs":{"d":"m14.5 4-5 16"}}], + service: [{"tagName":"rect","attrs":{"width":"20","height":"8","x":"2","y":"2","rx":"2","ry":"2"}},{"tagName":"rect","attrs":{"width":"20","height":"8","x":"2","y":"14","rx":"2","ry":"2"}},{"tagName":"line","attrs":{"x1":"6","x2":"6.01","y1":"6","y2":"6"}},{"tagName":"line","attrs":{"x1":"6","x2":"6.01","y1":"18","y2":"18"}}], + cpu: [{"tagName":"path","attrs":{"d":"M12 20v2"}},{"tagName":"path","attrs":{"d":"M12 2v2"}},{"tagName":"path","attrs":{"d":"M17 20v2"}},{"tagName":"path","attrs":{"d":"M17 2v2"}},{"tagName":"path","attrs":{"d":"M2 12h2"}},{"tagName":"path","attrs":{"d":"M2 17h2"}},{"tagName":"path","attrs":{"d":"M2 7h2"}},{"tagName":"path","attrs":{"d":"M20 12h2"}},{"tagName":"path","attrs":{"d":"M20 17h2"}},{"tagName":"path","attrs":{"d":"M20 7h2"}},{"tagName":"path","attrs":{"d":"M7 20v2"}},{"tagName":"path","attrs":{"d":"M7 2v2"}},{"tagName":"rect","attrs":{"x":"4","y":"4","width":"16","height":"16","rx":"2"}},{"tagName":"rect","attrs":{"x":"8","y":"8","width":"8","height":"8","rx":"1"}}], + gpu: [{"tagName":"path","attrs":{"d":"M2 17h18a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2H2"}},{"tagName":"path","attrs":{"d":"M2 21V3"}},{"tagName":"path","attrs":{"d":"M7 17v3a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1v-3"}},{"tagName":"circle","attrs":{"cx":"16","cy":"11","r":"2"}},{"tagName":"circle","attrs":{"cx":"8","cy":"11","r":"2"}}], + memory: [{"tagName":"path","attrs":{"d":"M12 12v-2"}},{"tagName":"path","attrs":{"d":"M12 18v-2"}},{"tagName":"path","attrs":{"d":"M16 12v-2"}},{"tagName":"path","attrs":{"d":"M16 18v-2"}},{"tagName":"path","attrs":{"d":"M2 11h1.5"}},{"tagName":"path","attrs":{"d":"M20 18v-2"}},{"tagName":"path","attrs":{"d":"M20.5 11H22"}},{"tagName":"path","attrs":{"d":"M4 18v-2"}},{"tagName":"path","attrs":{"d":"M8 12v-2"}},{"tagName":"path","attrs":{"d":"M8 18v-2"}},{"tagName":"rect","attrs":{"x":"2","y":"6","width":"20","height":"10","rx":"2"}}], + virtualMachine: [{"tagName":"path","attrs":{"d":"m10.852 14.772-.383.923"}},{"tagName":"path","attrs":{"d":"M13.148 14.772a3 3 0 1 0-2.296-5.544l-.383-.923"}},{"tagName":"path","attrs":{"d":"m13.148 9.228.383-.923"}},{"tagName":"path","attrs":{"d":"m13.53 15.696-.382-.924a3 3 0 1 1-2.296-5.544"}},{"tagName":"path","attrs":{"d":"m14.772 10.852.923-.383"}},{"tagName":"path","attrs":{"d":"m14.772 13.148.923.383"}},{"tagName":"path","attrs":{"d":"M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5"}},{"tagName":"path","attrs":{"d":"M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5"}},{"tagName":"path","attrs":{"d":"M6 18h.01"}},{"tagName":"path","attrs":{"d":"M6 6h.01"}},{"tagName":"path","attrs":{"d":"m9.228 10.852-.923-.383"}},{"tagName":"path","attrs":{"d":"m9.228 13.148-.923.383"}}], + container: [{"tagName":"path","attrs":{"d":"M22 7.7c0-.6-.4-1.2-.8-1.5l-6.3-3.9a1.72 1.72 0 0 0-1.7 0l-10.3 6c-.5.2-.9.8-.9 1.4v6.6c0 .5.4 1.2.8 1.5l6.3 3.9a1.72 1.72 0 0 0 1.7 0l10.3-6c.5-.3.9-1 .9-1.5Z"}},{"tagName":"path","attrs":{"d":"M10 21.9V14L2.1 9.1"}},{"tagName":"path","attrs":{"d":"m10 14 11.9-6.9"}},{"tagName":"path","attrs":{"d":"M14 19.8v-8.1"}},{"tagName":"path","attrs":{"d":"M18 17.5V9.4"}}], + kubernetes: [{"tagName":"circle","attrs":{"cx":"12","cy":"12","r":"8"}},{"tagName":"path","attrs":{"d":"M12 2v7.5"}},{"tagName":"path","attrs":{"d":"m19 5-5.23 5.23"}},{"tagName":"path","attrs":{"d":"M22 12h-7.5"}},{"tagName":"path","attrs":{"d":"m19 19-5.23-5.23"}},{"tagName":"path","attrs":{"d":"M12 14.5V22"}},{"tagName":"path","attrs":{"d":"M10.23 13.77 5 19"}},{"tagName":"path","attrs":{"d":"M9.5 12H2"}},{"tagName":"path","attrs":{"d":"M10.23 10.23 5 5"}},{"tagName":"circle","attrs":{"cx":"12","cy":"12","r":"2.5"}}], + serverless: [{"tagName":"rect","attrs":{"width":"18","height":"18","x":"3","y":"3","rx":"2","ry":"2"}},{"tagName":"path","attrs":{"d":"M9 17c2 0 2.8-1 2.8-2.8V10c0-2 1-3.3 3.2-3"}},{"tagName":"path","attrs":{"d":"M9 11.2h5.7"}}], + largeLanguageModel: [{"tagName":"path","attrs":{"d":"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z"}},{"tagName":"path","attrs":{"d":"M9 13a4.5 4.5 0 0 0 3-4"}},{"tagName":"path","attrs":{"d":"M6.003 5.125A3 3 0 0 0 6.401 6.5"}},{"tagName":"path","attrs":{"d":"M3.477 10.896a4 4 0 0 1 .585-.396"}},{"tagName":"path","attrs":{"d":"M6 18a4 4 0 0 1-1.967-.516"}},{"tagName":"path","attrs":{"d":"M12 13h4"}},{"tagName":"path","attrs":{"d":"M12 18h6a2 2 0 0 1 2 2v1"}},{"tagName":"path","attrs":{"d":"M12 8h8"}},{"tagName":"path","attrs":{"d":"M16 8V5a2 2 0 0 1 2-2"}},{"tagName":"circle","attrs":{"cx":"16","cy":"13","r":".5"}},{"tagName":"circle","attrs":{"cx":"18","cy":"3","r":".5"}},{"tagName":"circle","attrs":{"cx":"20","cy":"21","r":".5"}},{"tagName":"circle","attrs":{"cx":"20","cy":"8","r":".5"}}], + multimodalModel: [{"tagName":"path","attrs":{"d":"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z"}},{"tagName":"path","attrs":{"d":"M20 2v4"}},{"tagName":"path","attrs":{"d":"M22 4h-4"}},{"tagName":"circle","attrs":{"cx":"4","cy":"20","r":"2"}}], + embeddingModel: [{"tagName":"rect","attrs":{"x":"14","y":"14","width":"4","height":"6","rx":"2"}},{"tagName":"rect","attrs":{"x":"6","y":"4","width":"4","height":"6","rx":"2"}},{"tagName":"path","attrs":{"d":"M6 20h4"}},{"tagName":"path","attrs":{"d":"M14 10h4"}},{"tagName":"path","attrs":{"d":"M6 14h2v6"}},{"tagName":"path","attrs":{"d":"M14 4h2v6"}}], + reranker: [{"tagName":"path","attrs":{"d":"m3 16 4 4 4-4"}},{"tagName":"path","attrs":{"d":"M7 20V4"}},{"tagName":"path","attrs":{"d":"m21 8-4-4-4 4"}},{"tagName":"path","attrs":{"d":"M17 4v16"}}], + modelInference: [{"tagName":"path","attrs":{"d":"M10 12h4"}},{"tagName":"path","attrs":{"d":"M10 17h4"}},{"tagName":"path","attrs":{"d":"M10 7h4"}},{"tagName":"path","attrs":{"d":"M18 12h2"}},{"tagName":"path","attrs":{"d":"M18 18h2"}},{"tagName":"path","attrs":{"d":"M18 6h2"}},{"tagName":"path","attrs":{"d":"M4 12h2"}},{"tagName":"path","attrs":{"d":"M4 18h2"}},{"tagName":"path","attrs":{"d":"M4 6h2"}},{"tagName":"rect","attrs":{"x":"6","y":"2","width":"12","height":"20","rx":"2"}}], + vectorDatabase: [{"tagName":"path","attrs":{"d":"m10.586 5.414-5.172 5.172"}},{"tagName":"path","attrs":{"d":"m18.586 13.414-5.172 5.172"}},{"tagName":"path","attrs":{"d":"M6 12h12"}},{"tagName":"circle","attrs":{"cx":"12","cy":"20","r":"2"}},{"tagName":"circle","attrs":{"cx":"12","cy":"4","r":"2"}},{"tagName":"circle","attrs":{"cx":"20","cy":"12","r":"2"}},{"tagName":"circle","attrs":{"cx":"4","cy":"12","r":"2"}}], + ragPipeline: [{"tagName":"rect","attrs":{"width":"8","height":"8","x":"3","y":"3","rx":"2"}},{"tagName":"path","attrs":{"d":"M7 11v4a2 2 0 0 0 2 2h4"}},{"tagName":"rect","attrs":{"width":"8","height":"8","x":"13","y":"13","rx":"2"}}], + aiAgent: [{"tagName":"path","attrs":{"d":"M12 8V4H8"}},{"tagName":"rect","attrs":{"width":"16","height":"12","x":"4","y":"8","rx":"2"}},{"tagName":"path","attrs":{"d":"M2 14h2"}},{"tagName":"path","attrs":{"d":"M20 14h2"}},{"tagName":"path","attrs":{"d":"M15 13v2"}},{"tagName":"path","attrs":{"d":"M9 13v2"}}], + modelGateway: [{"tagName":"rect","attrs":{"width":"20","height":"8","x":"2","y":"14","rx":"2"}},{"tagName":"path","attrs":{"d":"M6.01 18H6"}},{"tagName":"path","attrs":{"d":"M10.01 18H10"}},{"tagName":"path","attrs":{"d":"M15 10v4"}},{"tagName":"path","attrs":{"d":"M17.84 7.17a4 4 0 0 0-5.66 0"}},{"tagName":"path","attrs":{"d":"M20.66 4.34a8 8 0 0 0-11.31 0"}}], + mcpServer: [{"tagName":"path","attrs":{"d":"M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z"}},{"tagName":"path","attrs":{"d":"m2 22 3-3"}},{"tagName":"path","attrs":{"d":"M7.5 13.5 10 11"}},{"tagName":"path","attrs":{"d":"M10.5 16.5 13 14"}},{"tagName":"path","attrs":{"d":"m18 3-4 4h6l-4 4"}}], + relationalDatabase: [{"tagName":"ellipse","attrs":{"cx":"12","cy":"5","rx":"9","ry":"3"}},{"tagName":"path","attrs":{"d":"M3 5V19A9 3 0 0 0 21 19V5"}},{"tagName":"path","attrs":{"d":"M3 12A9 3 0 0 0 21 12"}}], + noSqlDatabase: [{"tagName":"ellipse","attrs":{"cx":"12","cy":"5","rx":"9","ry":"3"}},{"tagName":"path","attrs":{"d":"M3 5V19A9 3 0 0 0 15 21.84"}},{"tagName":"path","attrs":{"d":"M21 5V8"}},{"tagName":"path","attrs":{"d":"M21 12L18 17H22L19 22"}},{"tagName":"path","attrs":{"d":"M3 12A9 3 0 0 0 14.59 14.87"}}], + cache: [{"tagName":"path","attrs":{"d":"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"}}], + dataWarehouse: [{"tagName":"path","attrs":{"d":"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z"}},{"tagName":"path","attrs":{"d":"m7 16.5-4.74-2.85"}},{"tagName":"path","attrs":{"d":"m7 16.5 5-3"}},{"tagName":"path","attrs":{"d":"M7 16.5v5.17"}},{"tagName":"path","attrs":{"d":"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z"}},{"tagName":"path","attrs":{"d":"m17 16.5-5-3"}},{"tagName":"path","attrs":{"d":"m17 16.5 4.74-2.85"}},{"tagName":"path","attrs":{"d":"M17 16.5v5.17"}},{"tagName":"path","attrs":{"d":"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z"}},{"tagName":"path","attrs":{"d":"M12 8 7.26 5.15"}},{"tagName":"path","attrs":{"d":"m12 8 4.74-2.85"}},{"tagName":"path","attrs":{"d":"M12 13.5V8"}}], + searchEngine: [{"tagName":"path","attrs":{"d":"m21 21-4.34-4.34"}},{"tagName":"circle","attrs":{"cx":"11","cy":"11","r":"8"}}], + objectStorage: [{"tagName":"path","attrs":{"d":"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z"}}], + fileStorage: [{"tagName":"path","attrs":{"d":"M11 21a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1"}},{"tagName":"path","attrs":{"d":"M16 16a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1"}},{"tagName":"path","attrs":{"d":"M21 6a2 2 0 0 0-.586-1.414l-2-2A2 2 0 0 0 17 2h-3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1z"}}], + blockStorage: [{"tagName":"path","attrs":{"d":"M10 16h.01"}},{"tagName":"path","attrs":{"d":"M2.212 11.577a2 2 0 0 0-.212.896V18a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5.527a2 2 0 0 0-.212-.896L18.55 5.11A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"}},{"tagName":"path","attrs":{"d":"M21.946 12.013H2.054"}},{"tagName":"path","attrs":{"d":"M6 16h.01"}}], + backup: [{"tagName":"circle","attrs":{"cx":"15","cy":"19","r":"2"}},{"tagName":"path","attrs":{"d":"M20.9 19.8A2 2 0 0 0 22 18V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2h5.1"}},{"tagName":"path","attrs":{"d":"M15 11v-1"}},{"tagName":"path","attrs":{"d":"M15 17v-2"}}], + cdn: [{"tagName":"path","attrs":{"d":"M16.247 7.761a6 6 0 0 1 0 8.478"}},{"tagName":"path","attrs":{"d":"M19.075 4.933a10 10 0 0 1 0 14.134"}},{"tagName":"path","attrs":{"d":"M4.925 19.067a10 10 0 0 1 0-14.134"}},{"tagName":"path","attrs":{"d":"M7.753 16.239a6 6 0 0 1 0-8.478"}},{"tagName":"circle","attrs":{"cx":"12","cy":"12","r":"2"}}], + messageQueue: [{"tagName":"path","attrs":{"d":"M11 5h10"}},{"tagName":"path","attrs":{"d":"M11 12h10"}},{"tagName":"path","attrs":{"d":"M11 19h10"}},{"tagName":"path","attrs":{"d":"M4 4h1v5"}},{"tagName":"path","attrs":{"d":"M4 9h2"}},{"tagName":"path","attrs":{"d":"M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02"}}], + eventBus: [{"tagName":"circle","attrs":{"cx":"18","cy":"5","r":"3"}},{"tagName":"circle","attrs":{"cx":"6","cy":"12","r":"3"}},{"tagName":"circle","attrs":{"cx":"18","cy":"19","r":"3"}},{"tagName":"line","attrs":{"x1":"8.59","x2":"15.42","y1":"13.51","y2":"17.49"}},{"tagName":"line","attrs":{"x1":"15.41","x2":"8.59","y1":"6.51","y2":"10.49"}}], + streamProcessing: [{"tagName":"path","attrs":{"d":"M2 12q2.5 2 5 0t5 0 5 0 5 0"}},{"tagName":"path","attrs":{"d":"M2 19q2.5 2 5 0t5 0 5 0 5 0"}},{"tagName":"path","attrs":{"d":"M2 5q2.5 2 5 0t5 0 5 0 5 0"}}], + webhook: [{"tagName":"path","attrs":{"d":"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2"}},{"tagName":"path","attrs":{"d":"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06"}},{"tagName":"path","attrs":{"d":"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8"}}], + serviceMesh: [{"tagName":"path","attrs":{"d":"M12 3v18"}},{"tagName":"path","attrs":{"d":"M3 12h18"}},{"tagName":"rect","attrs":{"x":"3","y":"3","width":"18","height":"18","rx":"2"}}], + apiGateway: [{"tagName":"circle","attrs":{"cx":"6","cy":"19","r":"3"}},{"tagName":"path","attrs":{"d":"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15"}},{"tagName":"circle","attrs":{"cx":"18","cy":"5","r":"3"}}], + loadBalancer: [{"tagName":"circle","attrs":{"cx":"12","cy":"18","r":"3"}},{"tagName":"circle","attrs":{"cx":"6","cy":"6","r":"3"}},{"tagName":"circle","attrs":{"cx":"18","cy":"6","r":"3"}},{"tagName":"path","attrs":{"d":"M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9"}},{"tagName":"path","attrs":{"d":"M12 12v3"}}], + dns: [{"tagName":"circle","attrs":{"cx":"12","cy":"12","r":"10"}},{"tagName":"path","attrs":{"d":"m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z"}}], + vpc: [{"tagName":"rect","attrs":{"x":"16","y":"16","width":"6","height":"6","rx":"1"}},{"tagName":"rect","attrs":{"x":"2","y":"16","width":"6","height":"6","rx":"1"}},{"tagName":"rect","attrs":{"x":"9","y":"2","width":"6","height":"6","rx":"1"}},{"tagName":"path","attrs":{"d":"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3"}},{"tagName":"path","attrs":{"d":"M12 12V8"}}], + subnet: [{"tagName":"path","attrs":{"d":"M17 19a1 1 0 0 1-1-1v-2a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2a1 1 0 0 1-1 1z"}},{"tagName":"path","attrs":{"d":"M17 21v-2"}},{"tagName":"path","attrs":{"d":"M19 14V6.5a1 1 0 0 0-7 0v11a1 1 0 0 1-7 0V10"}},{"tagName":"path","attrs":{"d":"M21 21v-2"}},{"tagName":"path","attrs":{"d":"M3 5V3"}},{"tagName":"path","attrs":{"d":"M4 10a2 2 0 0 1-2-2V6a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2a2 2 0 0 1-2 2z"}},{"tagName":"path","attrs":{"d":"M7 5V3"}}], + vpn: [{"tagName":"path","attrs":{"d":"m15 20 3-3h2a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h2l3 3z"}},{"tagName":"path","attrs":{"d":"M6 8v1"}},{"tagName":"path","attrs":{"d":"M10 8v1"}},{"tagName":"path","attrs":{"d":"M14 8v1"}},{"tagName":"path","attrs":{"d":"M18 8v1"}}], + identity: [{"tagName":"path","attrs":{"d":"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z"}},{"tagName":"circle","attrs":{"cx":"16.5","cy":"7.5","r":".5","fill":"currentColor"}}], + firewall: [{"tagName":"rect","attrs":{"width":"18","height":"18","x":"3","y":"3","rx":"2"}},{"tagName":"path","attrs":{"d":"M12 9v6"}},{"tagName":"path","attrs":{"d":"M16 15v6"}},{"tagName":"path","attrs":{"d":"M16 3v6"}},{"tagName":"path","attrs":{"d":"M3 15h18"}},{"tagName":"path","attrs":{"d":"M3 9h18"}},{"tagName":"path","attrs":{"d":"M8 15v6"}},{"tagName":"path","attrs":{"d":"M8 3v6"}}], + waf: [{"tagName":"path","attrs":{"d":"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"}},{"tagName":"path","attrs":{"d":"m9 12 2 2 4-4"}}], + secretManager: [{"tagName":"circle","attrs":{"cx":"12","cy":"16","r":"1"}},{"tagName":"rect","attrs":{"x":"3","y":"10","width":"18","height":"12","rx":"2"}},{"tagName":"path","attrs":{"d":"M7 10V7a5 5 0 0 1 10 0v3"}}], + certificate: [{"tagName":"path","attrs":{"d":"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"}},{"tagName":"path","attrs":{"d":"M8 12h.01"}},{"tagName":"path","attrs":{"d":"M12 12h.01"}},{"tagName":"path","attrs":{"d":"M16 12h.01"}}], + systemBoundary: [{"tagName":"path","attrs":{"d":"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z"}},{"tagName":"path","attrs":{"d":"m3.3 7 8.7 5 8.7-5"}},{"tagName":"path","attrs":{"d":"M12 22V12"}}], + monitoring: [{"tagName":"path","attrs":{"d":"m12 14 4-4"}},{"tagName":"path","attrs":{"d":"M3.34 19a10 10 0 1 1 17.32 0"}}], + logging: [{"tagName":"path","attrs":{"d":"M16 22h2a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v2.85"}},{"tagName":"path","attrs":{"d":"M14 2v5a1 1 0 0 0 1 1h5"}},{"tagName":"path","attrs":{"d":"M8 14v2.2l1.6 1"}},{"tagName":"circle","attrs":{"cx":"8","cy":"16","r":"6"}}], + metrics: [{"tagName":"path","attrs":{"d":"M12 16v5"}},{"tagName":"path","attrs":{"d":"M16 14.639V21"}},{"tagName":"path","attrs":{"d":"M20 10.656V21"}},{"tagName":"path","attrs":{"d":"m22 3-8.646 8.646a.5.5 0 0 1-.708 0L9.354 8.354a.5.5 0 0 0-.707 0L2 15"}},{"tagName":"path","attrs":{"d":"M4 18.463V21"}},{"tagName":"path","attrs":{"d":"M8 14.656V21"}}], + tracing: [{"tagName":"path","attrs":{"d":"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"}}], + alerting: [{"tagName":"circle","attrs":{"cx":"12","cy":"12","r":"10"}},{"tagName":"line","attrs":{"x1":"12","x2":"12","y1":"8","y2":"12"}},{"tagName":"line","attrs":{"x1":"12","x2":"12.01","y1":"16","y2":"16"}}], + saas: [{"tagName":"path","attrs":{"d":"m10.852 19.772-.383.924"}},{"tagName":"path","attrs":{"d":"m13.148 14.228.383-.923"}},{"tagName":"path","attrs":{"d":"M13.148 19.772a3 3 0 1 0-2.296-5.544l-.383-.923"}},{"tagName":"path","attrs":{"d":"m13.53 20.696-.382-.924a3 3 0 1 1-2.296-5.544"}},{"tagName":"path","attrs":{"d":"m14.772 15.852.923-.383"}},{"tagName":"path","attrs":{"d":"m14.772 18.148.923.383"}},{"tagName":"path","attrs":{"d":"M4.2 15.1a7 7 0 1 1 9.93-9.858A7 7 0 0 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.2"}},{"tagName":"path","attrs":{"d":"m9.228 15.852-.923-.383"}},{"tagName":"path","attrs":{"d":"m9.228 18.148-.923.383"}}], + externalApi: [{"tagName":"path","attrs":{"d":"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1"}},{"tagName":"path","attrs":{"d":"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1"}}], + thirdPartyService: [{"tagName":"path","attrs":{"d":"M15 3h6v6"}},{"tagName":"path","attrs":{"d":"M10 14 21 3"}},{"tagName":"path","attrs":{"d":"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}}], }; diff --git a/packages/shared/src/diagram-architecture-style.ts b/packages/shared/src/diagram-architecture-style.ts index 9f117fe2..cd0f28e0 100644 --- a/packages/shared/src/diagram-architecture-style.ts +++ b/packages/shared/src/diagram-architecture-style.ts @@ -38,7 +38,7 @@ export const ARCHITECTURE_ACCENTS: Record = external: "#64748B", }; -const ARCHITECTURE_SHAPE_RESOURCE: Record = { +export const ARCHITECTURE_SHAPE_RESOURCE: Record = { client: "client", frontend: "webApp", service: "service", diff --git a/packages/shared/src/diagram.ts b/packages/shared/src/diagram.ts index e6edae88..8038cce5 100644 --- a/packages/shared/src/diagram.ts +++ b/packages/shared/src/diagram.ts @@ -89,7 +89,7 @@ export const resolveDiagramStructure = (structure?: DiagramStructure): DiagramSt export const ARCHITECTURE_RESOURCE_ICONS = [ "client", "webApp", "mobileApp", "website", "apiClient", - "service", "virtualMachine", "container", "kubernetes", "serverless", + "service", "cpu", "gpu", "memory", "virtualMachine", "container", "kubernetes", "serverless", "largeLanguageModel", "multimodalModel", "embeddingModel", "reranker", "modelInference", "vectorDatabase", "ragPipeline", "aiAgent", "modelGateway", "mcpServer", "relationalDatabase", "noSqlDatabase", "cache", "dataWarehouse", "searchEngine", diff --git a/packages/shared/src/i18n/en-US.ts b/packages/shared/src/i18n/en-US.ts index 1c2b024f..ef7d0da7 100644 --- a/packages/shared/src/i18n/en-US.ts +++ b/packages/shared/src/i18n/en-US.ts @@ -325,6 +325,9 @@ export const enUS = { website: "Website", apiClient: "API client", service: "Application service", + cpu: "CPU core", + gpu: "GPU", + memory: "Memory", virtualMachine: "Virtual machine", container: "Container", kubernetes: "Kubernetes", @@ -391,6 +394,8 @@ export const enUS = { quickCreateTitle: "Choose the next node type", quickCreateShortcuts: "Press 1 / 2 / 3 to choose; Esc to cancel", nodeText: "Node text", + nodeIcon: "Node icon", + changeNodeIcon: "Change node icon", edgeText: "Connection label", editNode: "Edit node text", deleteSelection: "Delete selection", diff --git a/packages/shared/src/i18n/ja.ts b/packages/shared/src/i18n/ja.ts index efc39902..3053a13f 100644 --- a/packages/shared/src/i18n/ja.ts +++ b/packages/shared/src/i18n/ja.ts @@ -325,6 +325,9 @@ export const ja = { website: "ウェブサイト", apiClient: "API クライアント", service: "アプリケーションサービス", + cpu: "CPU コア", + gpu: "GPU", + memory: "メモリ", virtualMachine: "仮想マシン", container: "コンテナ", kubernetes: "Kubernetes", @@ -391,6 +394,8 @@ export const ja = { quickCreateTitle: "次のノードの種類を選択", quickCreateShortcuts: "1 / 2 / 3 で選択、Esc でキャンセル", nodeText: "ノードの文字", + nodeIcon: "ノードアイコン", + changeNodeIcon: "ノードアイコンを変更", edgeText: "接続ラベル", editNode: "ノードの文字を編集", deleteSelection: "選択を削除", diff --git a/packages/shared/src/i18n/zh-CN.ts b/packages/shared/src/i18n/zh-CN.ts index cc776921..22fdc3f2 100644 --- a/packages/shared/src/i18n/zh-CN.ts +++ b/packages/shared/src/i18n/zh-CN.ts @@ -325,6 +325,9 @@ export const zhCN = { website: "网站", apiClient: "API 客户端", service: "应用服务", + cpu: "CPU 核心", + gpu: "GPU / 显卡", + memory: "内存 / 显存", virtualMachine: "虚拟机", container: "容器", kubernetes: "Kubernetes", @@ -391,6 +394,8 @@ export const zhCN = { quickCreateTitle: "选择后续节点类型", quickCreateShortcuts: "按 1 / 2 / 3 选择,Esc 取消", nodeText: "节点文字", + nodeIcon: "节点图标", + changeNodeIcon: "更换节点图标", edgeText: "连线说明", editNode: "编辑节点文字", deleteSelection: "删除所选内容",