@oneuptime/common 11.0.10 → 11.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/DatabaseModels/CephCluster.ts +134 -0
- package/Models/DatabaseModels/CloudResource.ts +134 -0
- package/Models/DatabaseModels/DockerHost.ts +134 -0
- package/Models/DatabaseModels/DockerSwarmCluster.ts +134 -0
- package/Models/DatabaseModels/Host.ts +134 -0
- package/Models/DatabaseModels/KubernetesCluster.ts +134 -0
- package/Models/DatabaseModels/PodmanHost.ts +134 -0
- package/Models/DatabaseModels/ProxmoxCluster.ts +134 -0
- package/Models/DatabaseModels/RumApplication.ts +134 -0
- package/Models/DatabaseModels/ServerlessFunction.ts +134 -0
- package/Models/DatabaseModels/Service.ts +134 -0
- package/Models/DatabaseModels/StatusPage.ts +0 -42
- package/README.md +1 -1
- package/Scripts/generate-service-worker.js +46 -36
- package/Server/Infrastructure/Postgres/DataSourceOptions.ts +4 -2
- package/Server/Infrastructure/Postgres/SchemaMigrations/1782600000000-AddArchiveToResources.ts +331 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1782700000000-RemoveDeprecatedEnableSubscribersFromStatusPage.ts +35 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Readme.md +3 -3
- package/Server/Infrastructure/Queue.ts +122 -0
- package/Server/Services/AIAgentService.ts +9 -4
- package/Server/Services/AnalyticsDatabaseService.ts +89 -56
- package/Server/Services/CephClusterService.ts +6 -4
- package/Server/Services/CloudResourceService.ts +6 -4
- package/Server/Services/DatabaseService.ts +126 -0
- package/Server/Services/DockerHostService.ts +6 -4
- package/Server/Services/DockerSwarmClusterService.ts +6 -4
- package/Server/Services/HostService.ts +6 -4
- package/Server/Services/KubernetesClusterService.ts +6 -4
- package/Server/Services/PodmanHostService.ts +6 -4
- package/Server/Services/ProbeService.ts +10 -4
- package/Server/Services/ProxmoxClusterService.ts +6 -4
- package/Server/Services/RumApplicationService.ts +6 -4
- package/Server/Services/ServerlessFunctionService.ts +6 -4
- package/Server/Services/ServiceService.ts +17 -4
- package/Server/Types/Markdown.ts +103 -0
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +5 -2
- package/Server/Utils/CodeRepository/CodeRepository.ts +78 -0
- package/Server/Utils/Execute.ts +6 -0
- package/Server/Utils/Logger.ts +66 -0
- package/Server/Utils/Monitor/MonitorResource.ts +24 -10
- package/Server/Utils/Telemetry/EntityRegistry.ts +10 -5
- package/Server/Utils/Workspace/Slack/app-manifest.json +86 -92
- package/Tests/Server/Services/UpdateColumnsByIdWithoutHooks.test.ts +154 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +87 -9
- package/Tests/Types/DiskSize.test.ts +49 -0
- package/Types/Dashboard/DashboardComponents/DashboardTableComponent.ts +11 -0
- package/Types/Icon/IconProp.ts +1 -0
- package/Types/Monitor/MonitorType.ts +15 -31
- package/Types/Monitor/schema.json +32 -35
- package/UI/Components/BulkUpdate/BulkArchiveActions.tsx +150 -0
- package/UI/Components/Icon/Icon.tsx +42 -126
- package/UI/Components/Navbar/NavBarMenuModal.tsx +2 -5
- package/UI/esbuild-config.js +136 -110
- package/Utils/ClientAPI/README.md +1 -1
- package/build/dist/Models/DatabaseModels/CephCluster.js +136 -0
- package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResource.js +136 -0
- package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHost.js +136 -0
- package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +136 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Host.js +136 -0
- package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js +136 -0
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/PodmanHost.js +136 -0
- package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +136 -0
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplication.js +136 -0
- package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunction.js +136 -0
- package/build/dist/Models/DatabaseModels/ServerlessFunction.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Service.js +136 -0
- package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +0 -44
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js +4 -2
- package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782600000000-AddArchiveToResources.js +120 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782600000000-AddArchiveToResources.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782700000000-RemoveDeprecatedEnableSubscribersFromStatusPage.js +28 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782700000000-RemoveDeprecatedEnableSubscribersFromStatusPage.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Queue.js +63 -0
- package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
- package/build/dist/Server/Services/AIAgentService.js +9 -4
- package/build/dist/Server/Services/AIAgentService.js.map +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +52 -17
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterService.js +6 -4
- package/build/dist/Server/Services/CephClusterService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceService.js +6 -4
- package/build/dist/Server/Services/CloudResourceService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +101 -0
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostService.js +6 -4
- package/build/dist/Server/Services/DockerHostService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterService.js +6 -4
- package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
- package/build/dist/Server/Services/HostService.js +6 -4
- package/build/dist/Server/Services/HostService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterService.js +6 -4
- package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostService.js +6 -4
- package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
- package/build/dist/Server/Services/ProbeService.js +10 -4
- package/build/dist/Server/Services/ProbeService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterService.js +6 -4
- package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationService.js +6 -4
- package/build/dist/Server/Services/RumApplicationService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionService.js +6 -4
- package/build/dist/Server/Services/ServerlessFunctionService.js.map +1 -1
- package/build/dist/Server/Services/ServiceService.js +17 -4
- package/build/dist/Server/Services/ServiceService.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +87 -0
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +3 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/CodeRepository.js +60 -0
- package/build/dist/Server/Utils/CodeRepository/CodeRepository.js.map +1 -1
- package/build/dist/Server/Utils/Execute.js +1 -3
- package/build/dist/Server/Utils/Execute.js.map +1 -1
- package/build/dist/Server/Utils/Logger.js +49 -1
- package/build/dist/Server/Utils/Logger.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +24 -10
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +10 -5
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/app-manifest.json +3 -9
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardTableComponent.js.map +1 -1
- package/build/dist/Types/Icon/IconProp.js +1 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorType.js +15 -31
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkArchiveActions.js +96 -0
- package/build/dist/UI/Components/BulkUpdate/BulkArchiveActions.js.map +1 -0
- package/build/dist/UI/Components/Icon/Icon.js +17 -41
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +2 -3
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/jest.config.json +47 -66
- package/package.json +1 -1
- package/tsconfig.json +109 -113
|
@@ -1,39 +1,36 @@
|
|
|
1
|
-
|
|
2
1
|
{
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
]
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
2
|
+
"_type": "MonitorSteps",
|
|
3
|
+
"value": {
|
|
4
|
+
"monitorStepsInstanceArray": [
|
|
5
|
+
{
|
|
6
|
+
"_type": "MonitorStep",
|
|
7
|
+
"value": {
|
|
8
|
+
"monitorDestination": {
|
|
9
|
+
"_type": "URL",
|
|
10
|
+
"value": "http://www.google.com"
|
|
11
|
+
},
|
|
12
|
+
"monitorCriteria": {
|
|
13
|
+
"_type": "MonitorCriteria",
|
|
14
|
+
"value": {
|
|
15
|
+
"monitorCriteriaInstanceArray": [
|
|
16
|
+
{
|
|
17
|
+
"_type": "MonitorCriteriaInstance",
|
|
18
|
+
"value": {
|
|
19
|
+
"monitorCriteriaType": {
|
|
20
|
+
"_type": "MonitorCriteriaType",
|
|
21
|
+
"value": "HTTP_STATUS_CODE"
|
|
22
|
+
},
|
|
23
|
+
"monitorCriteriaValue": {
|
|
24
|
+
"_type": "MonitorCriteriaValue",
|
|
25
|
+
"value": "200"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
35
28
|
}
|
|
29
|
+
]
|
|
36
30
|
}
|
|
37
|
-
|
|
38
|
-
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
39
36
|
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import BaseModel from "../../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
|
2
|
+
import BadDataException from "../../../Types/Exception/BadDataException";
|
|
3
|
+
import IconProp from "../../../Types/Icon/IconProp";
|
|
4
|
+
import ObjectID from "../../../Types/ObjectID";
|
|
5
|
+
import API from "../../Utils/API/API";
|
|
6
|
+
import ModelAPI from "../../Utils/ModelAPI/ModelAPI";
|
|
7
|
+
import { ButtonStyleType } from "../Button/Button";
|
|
8
|
+
import {
|
|
9
|
+
BulkActionButtonSchema,
|
|
10
|
+
BulkActionFailed,
|
|
11
|
+
BulkActionOnClickProps,
|
|
12
|
+
} from "./BulkUpdateForm";
|
|
13
|
+
|
|
14
|
+
export interface BulkArchiveActionsConfig<T extends BaseModel> {
|
|
15
|
+
modelType: { new (): T };
|
|
16
|
+
/**
|
|
17
|
+
* Singular/plural labels used in the confirmation copy, e.g. "service" /
|
|
18
|
+
* "services". Defaults to the model's own singular/plural names.
|
|
19
|
+
*/
|
|
20
|
+
singularName?: string | undefined;
|
|
21
|
+
pluralName?: string | undefined;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface BulkArchiveActionsResult<T extends BaseModel> {
|
|
25
|
+
archiveBulkActions: Array<BulkActionButtonSchema<T>>;
|
|
26
|
+
unarchiveBulkActions: Array<BulkActionButtonSchema<T>>;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
type ArchiveMode = "archive" | "unarchive";
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Reusable hook that provides "Archive" and "Unarchive" bulk actions for any
|
|
33
|
+
* ModelTable whose model has an `isArchived` boolean column. Archiving is a
|
|
34
|
+
* pure visibility flag — telemetry keeps being ingested for archived resources.
|
|
35
|
+
*
|
|
36
|
+
* The client only ever sends `{ isArchived: true | false }`; the server stamps
|
|
37
|
+
* `archivedAt` / `archivedByUserId` (see DatabaseService.sanitizeCreateOrUpdate).
|
|
38
|
+
*
|
|
39
|
+
* No form modal is needed — these actions use the confirm flow built into
|
|
40
|
+
* BulkUpdateForm (confirmMessage / confirmTitle).
|
|
41
|
+
*
|
|
42
|
+
* Usage:
|
|
43
|
+
* const { archiveBulkActions } = useBulkArchiveActions({ modelType: Service });
|
|
44
|
+
* <ModelTable bulkActions={{ buttons: [...archiveBulkActions] }} />
|
|
45
|
+
*/
|
|
46
|
+
function useBulkArchiveActions<T extends BaseModel>(
|
|
47
|
+
config: BulkArchiveActionsConfig<T>,
|
|
48
|
+
): BulkArchiveActionsResult<T> {
|
|
49
|
+
const model: T = new config.modelType();
|
|
50
|
+
const singularName: string =
|
|
51
|
+
config.singularName || model.singularName || "resource";
|
|
52
|
+
const pluralName: string =
|
|
53
|
+
config.pluralName || model.pluralName || "resources";
|
|
54
|
+
|
|
55
|
+
const applyArchive: (
|
|
56
|
+
mode: ArchiveMode,
|
|
57
|
+
props: BulkActionOnClickProps<T>,
|
|
58
|
+
) => Promise<void> = async (
|
|
59
|
+
mode: ArchiveMode,
|
|
60
|
+
props: BulkActionOnClickProps<T>,
|
|
61
|
+
): Promise<void> => {
|
|
62
|
+
const { items, onProgressInfo, onBulkActionStart, onBulkActionEnd } = props;
|
|
63
|
+
|
|
64
|
+
onBulkActionStart();
|
|
65
|
+
|
|
66
|
+
const totalItems: Array<T> = [...items];
|
|
67
|
+
const inProgressItems: Array<T> = [...items];
|
|
68
|
+
const successItems: Array<T> = [];
|
|
69
|
+
const failedItems: Array<BulkActionFailed<T>> = [];
|
|
70
|
+
|
|
71
|
+
for (const item of totalItems) {
|
|
72
|
+
inProgressItems.splice(inProgressItems.indexOf(item), 1);
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
if (!item.id) {
|
|
76
|
+
throw new BadDataException("Item ID not found");
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
await ModelAPI.updateById<T>({
|
|
80
|
+
id: item.id as ObjectID,
|
|
81
|
+
modelType: config.modelType,
|
|
82
|
+
data: {
|
|
83
|
+
isArchived: mode === "archive",
|
|
84
|
+
} as any,
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
successItems.push(item);
|
|
88
|
+
} catch (err) {
|
|
89
|
+
failedItems.push({
|
|
90
|
+
item: item,
|
|
91
|
+
failedMessage: API.getFriendlyMessage(err),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
onProgressInfo({
|
|
96
|
+
totalItems: totalItems,
|
|
97
|
+
failed: failedItems,
|
|
98
|
+
successItems: successItems,
|
|
99
|
+
inProgressItems: inProgressItems,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
onBulkActionEnd();
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const archiveAction: BulkActionButtonSchema<T> = {
|
|
107
|
+
title: "Archive",
|
|
108
|
+
icon: IconProp.Archive,
|
|
109
|
+
buttonStyleType: ButtonStyleType.NORMAL,
|
|
110
|
+
confirmTitle: (items: Array<T>): string => {
|
|
111
|
+
return `Archive ${items.length} ${
|
|
112
|
+
items.length === 1 ? singularName : pluralName
|
|
113
|
+
}?`;
|
|
114
|
+
},
|
|
115
|
+
confirmMessage: (items: Array<T>): string => {
|
|
116
|
+
return `Are you sure you want to archive the selected ${
|
|
117
|
+
items.length === 1 ? singularName : pluralName
|
|
118
|
+
}? They will be hidden from the list but will keep collecting telemetry. You can unarchive them anytime from the Archived tab.`;
|
|
119
|
+
},
|
|
120
|
+
onClick: async (props: BulkActionOnClickProps<T>): Promise<void> => {
|
|
121
|
+
await applyArchive("archive", props);
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
const unarchiveAction: BulkActionButtonSchema<T> = {
|
|
126
|
+
title: "Unarchive",
|
|
127
|
+
icon: IconProp.Unarchive,
|
|
128
|
+
buttonStyleType: ButtonStyleType.NORMAL,
|
|
129
|
+
confirmTitle: (items: Array<T>): string => {
|
|
130
|
+
return `Unarchive ${items.length} ${
|
|
131
|
+
items.length === 1 ? singularName : pluralName
|
|
132
|
+
}?`;
|
|
133
|
+
},
|
|
134
|
+
confirmMessage: (items: Array<T>): string => {
|
|
135
|
+
return `Are you sure you want to unarchive the selected ${
|
|
136
|
+
items.length === 1 ? singularName : pluralName
|
|
137
|
+
}? They will reappear in the main list.`;
|
|
138
|
+
},
|
|
139
|
+
onClick: async (props: BulkActionOnClickProps<T>): Promise<void> => {
|
|
140
|
+
await applyArchive("unarchive", props);
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
return {
|
|
145
|
+
archiveBulkActions: [archiveAction],
|
|
146
|
+
unarchiveBulkActions: [unarchiveAction],
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export default useBulkArchiveActions;
|
|
@@ -2894,146 +2894,62 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
|
|
2894
2894
|
/>
|
|
2895
2895
|
</>,
|
|
2896
2896
|
);
|
|
2897
|
-
} else if (icon === IconProp.
|
|
2897
|
+
} else if (icon === IconProp.DockerSwarm) {
|
|
2898
2898
|
/*
|
|
2899
|
-
*
|
|
2900
|
-
*
|
|
2901
|
-
*
|
|
2902
|
-
* the
|
|
2903
|
-
*
|
|
2899
|
+
* Docker Swarm glyph — a honeycomb cluster of three hexagonal nodes, an
|
|
2900
|
+
* abstract "swarm of nodes" mark. Rendered as filled hexagons to sit with
|
|
2901
|
+
* the other resource brand logos (Podman / Proxmox / Ceph) and stay clearly
|
|
2902
|
+
* distinct from the single Docker whale. (Docker Swarm has no official
|
|
2903
|
+
* standalone logo, so this is a themed cluster mark rather than a real one.)
|
|
2904
2904
|
*/
|
|
2905
2905
|
return getSvgWrapper(
|
|
2906
2906
|
<>
|
|
2907
|
-
{/*
|
|
2908
|
-
<
|
|
2909
|
-
|
|
2910
|
-
|
|
2911
|
-
|
|
2912
|
-
height="11"
|
|
2913
|
-
rx="2"
|
|
2914
|
-
strokeLinecap="round"
|
|
2915
|
-
strokeLinejoin="round"
|
|
2916
|
-
/>
|
|
2917
|
-
{/* Grouped containers inside the pod */}
|
|
2918
|
-
<rect
|
|
2919
|
-
x="6"
|
|
2920
|
-
y="12"
|
|
2921
|
-
width="3.5"
|
|
2922
|
-
height="4"
|
|
2923
|
-
rx="0.4"
|
|
2924
|
-
strokeLinecap="round"
|
|
2925
|
-
strokeLinejoin="round"
|
|
2926
|
-
/>
|
|
2927
|
-
<rect
|
|
2928
|
-
x="10.25"
|
|
2929
|
-
y="12"
|
|
2930
|
-
width="3.5"
|
|
2931
|
-
height="4"
|
|
2932
|
-
rx="0.4"
|
|
2933
|
-
strokeLinecap="round"
|
|
2934
|
-
strokeLinejoin="round"
|
|
2907
|
+
{/* Top node */}
|
|
2908
|
+
<polygon
|
|
2909
|
+
fill="currentColor"
|
|
2910
|
+
stroke="none"
|
|
2911
|
+
points="12,3.2 15.55,5.25 15.55,9.35 12,11.4 8.45,9.35 8.45,5.25"
|
|
2935
2912
|
/>
|
|
2936
|
-
|
|
2937
|
-
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
rx="0.4"
|
|
2942
|
-
strokeLinecap="round"
|
|
2943
|
-
strokeLinejoin="round"
|
|
2913
|
+
{/* Bottom-left node */}
|
|
2914
|
+
<polygon
|
|
2915
|
+
fill="currentColor"
|
|
2916
|
+
stroke="none"
|
|
2917
|
+
points="7.7,11 11.25,13.05 11.25,17.15 7.7,19.2 4.15,17.15 4.15,13.05"
|
|
2944
2918
|
/>
|
|
2945
|
-
{/*
|
|
2946
|
-
<
|
|
2947
|
-
|
|
2948
|
-
|
|
2949
|
-
|
|
2950
|
-
d="M19 6.2c1 0.1 1.8-0.2 2.4-0.9"
|
|
2919
|
+
{/* Bottom-right node */}
|
|
2920
|
+
<polygon
|
|
2921
|
+
fill="currentColor"
|
|
2922
|
+
stroke="none"
|
|
2923
|
+
points="16.3,11 19.85,13.05 19.85,17.15 16.3,19.2 12.75,17.15 12.75,13.05"
|
|
2951
2924
|
/>
|
|
2952
2925
|
</>,
|
|
2953
2926
|
);
|
|
2927
|
+
} else if (icon === IconProp.Podman) {
|
|
2928
|
+
// Podman official logo mark (Simple Icons, CC0) — single filled path.
|
|
2929
|
+
return getSvgWrapper(
|
|
2930
|
+
<path
|
|
2931
|
+
fill="currentColor"
|
|
2932
|
+
stroke="none"
|
|
2933
|
+
d="M17.2.275L6.75.308a.259.259 0 0 0-.203.098L.056 8.602a.259.259 0 0 0-.05.219l2.356 10.194a.26.26 0 0 0 .14.174l9.43 4.511a.258.258 0 0 0 .224-.002l9.401-4.566a.259.259 0 0 0 .141-.175L23.993 8.75a.258.258 0 0 0-.051-.22L17.403.374A.259.259 0 0 0 17.2.275zm-.123.517l6.385 7.966-2.242 9.964-9.177 4.457-9.205-4.402L.54 8.827 6.875.824zM11.46 2.857c-.933 0-1.84.1-2.426.332h-.002c-1.554.569-2.725 2.105-3.074 3.952v.004c-.309 1.463-.392 2.703-.556 3.824-.07.481-.159.94-.283 1.387-.628.497-1.079 1.263-1.244 2.138v.004c-.116.547-.181 1.04-.237 1.5h-.644v.518h8.891c-.061.464-.122.996-.181 1.42H7.596v.517h7.939c-.242-.078-.486-.218-.756-.502h-.697l-.85.488-.232-.396.162-.092h-1.069c.113-.776.17-1.601.373-2.564v-.004c.22-1.164.96-2.112 1.895-2.453l.004-.002h.002c.318-.127.928-.205 1.543-.205.613 0 1.244.075 1.622.207.935.341 1.676 1.29 1.895 2.453v.004c.204.963.26 1.788.373 2.564h-.742l.162.092-.233.396-.85-.488h-.75c-.219.25-.474.412-.747.502h4.392v-.518h-.842c-.103-.743-.181-1.67-.382-2.623v-.002a4.14 4.14 0 0 0-.264-.863h1.863v-.517h-2.13a3.488 3.488 0 0 0-.8-.906h1.8v-.518H17.95a8.862 8.862 0 0 1-.193-.775h1.484v-.518h-1.576c-.013-.081-.027-.161-.039-.244-.164-1.12-.246-2.36-.555-3.824v-.004c-.348-1.848-1.52-3.383-3.075-3.952l-.002-.002h-.002c-.65-.227-1.596-.33-2.531-.33zm0 .386c.904 0 1.833.11 2.404.309h.002c1.4.514 2.5 1.934 2.826 3.666v.003c.303 1.436.385 2.66.552 3.805.076.515.173 1.013.315 1.505-.449-.135-1.05-.197-1.648-.197-.12 0-.236.003-.352.008l-1.863-1.865a2.17 2.17 0 0 0 .11-.246l2.13 1.23.13-.224-2.185-1.262c.016-.069.027-.14.036-.21l2.302.616.068-.248-2.354-.63c-.02-1.153-1.008-2.078-2.208-2.078-1.205 0-2.196.931-2.206 2.091l-2.303.617.066.25 2.252-.605c.01.076.024.151.041.224L7.436 11.24l.129.222 2.087-1.207c.034.089.074.176.12.258l-1.266 1.266a6.959 6.959 0 0 0-1.045-.075c-.603 0-1.186.064-1.578.22a2.668 2.668 0 0 0-.285.124c.076-.335.137-.675.187-1.021.168-1.144.248-2.37.551-3.805l.002-.001v-.002c.326-1.733 1.426-3.153 2.828-3.666h.002l.004-.002c.488-.194 1.381-.307 2.287-.307zM8.473 5.194a1.295 1.295 0 0 0-.965.502l-.117.153.306.236.12-.152a.923.923 0 0 1 .673-.352.92.92 0 0 1 .67.262l.139.134.271-.275-.136-.137a1.293 1.293 0 0 0-.961-.37zm6.39 0a1.289 1.289 0 0 0-.96.371l-.138.137.274.275.136-.134a.923.923 0 0 1 .672-.262.923.923 0 0 1 .674.352l.119.152.307-.236-.12-.153c-.23-.3-.587-.486-.964-.502zM8.53 6.708c-.642 0-1.164.538-1.164 1.19 0 .65.522 1.187 1.164 1.187.643 0 1.164-.536 1.164-1.188 0-.651-.521-1.19-1.164-1.19zm6.273 0c-.643 0-1.162.538-1.162 1.19 0 .65.52 1.187 1.162 1.187.643 0 1.164-.536 1.164-1.188 0-.651-.521-1.19-1.164-1.19zm-6.273.387c.428 0 .776.355.776.802 0 .447-.348.8-.776.8a.785.785 0 0 1-.775-.8c0-.035.002-.07.006-.103.07.191.248.318.445.318a.487.487 0 0 0 .477-.496.49.49 0 0 0-.383-.486.759.759 0 0 1 .23-.035zm6.273 0c.428 0 .777.355.777.802 0 .447-.349.8-.777.8a.785.785 0 0 1-.77-.9c.072.19.248.315.444.315a.486.486 0 0 0 .479-.496.491.491 0 0 0-.383-.484.755.755 0 0 1 .23-.037zm-3.08.716c1.012 0 1.819.775 1.819 1.723 0 .947-.807 1.722-1.819 1.722s-1.82-.775-1.82-1.722c0-.948.808-1.723 1.82-1.723zm-.002.528c-.142 0-.258.043-.355.076a.804.804 0 0 1-.232.054c-.107 0-.2.047-.268.127a.568.568 0 0 0-.104.207c-.04.134-.062.268-.08.315a.276.276 0 0 0 .032.25c.033.056.071.1.117.146.09.092.206.183.322.268.12.088.237.166.326.224l-.008.09c-.043.036-.14.102-.324.178a.533.533 0 0 1-.299.025.43.43 0 0 1-.236-.172c.015-.138.044-.293.068-.449l-.376-.095c-.05.238-.067.43-.094.64l.037.059c.143.224.318.344.506.392a.908.908 0 0 0 .52-.033 1.57 1.57 0 0 0 .444-.242c.088.067.244.174.446.242a.908.908 0 0 0 .52.033.868.868 0 0 0 .507-.392l.037-.059a6.292 6.292 0 0 0-.096-.637l-.377.092c.032.148.051.32.07.451a.434.434 0 0 1-.237.17.533.533 0 0 1-.3-.025c-.178-.068-.272-.14-.325-.178l-.006-.084c.09-.058.209-.137.336-.23.115-.085.231-.176.322-.268a.72.72 0 0 0 .117-.146.273.273 0 0 0 .031-.25c-.018-.047-.039-.181-.08-.315a.564.564 0 0 0-.103-.207.343.343 0 0 0-.268-.127.815.815 0 0 1-.234-.054c-.097-.033-.212-.076-.354-.076zm.002.386c.057 0 .134.024.23.057.09.03.208.07.337.076.04.102.06.237.09.338a.361.361 0 0 1-.041.045 2.66 2.66 0 0 1-.276.228c-.165.122-.271.188-.342.233a5.287 5.287 0 0 1-.34-.233 2.557 2.557 0 0 1-.275-.228.34.34 0 0 1-.04-.047c.035-.119.046-.234.089-.34.08.012.246-.042.336-.072a.837.837 0 0 1 .232-.057zm-3.234.61a.635.635 0 0 0-.611.517l1.084-.289a.614.614 0 0 0-.473-.228zm6.336 0a.61.61 0 0 0-.436.187c.352.096.69.184 1.033.275a.632.632 0 0 0-.597-.462zm-.623.607c-.007.035-.002.07-.002.103l.921.532a.648.648 0 0 0 .276-.313l-1.195-.322zm-5.086.05l-1.18.315c.078.15.207.264.362.316l.797-.46c.018-.059.015-.12.021-.17zm4.441.714l1.656 1.658a4.19 4.19 0 0 0-.826.146l-.95-1.647a2.51 2.51 0 0 0 .12-.157zm-3.646.03c.04.055.083.118.129.169l-.658 1.134a2.656 2.656 0 0 0-.276-.119l-.002-.002a3.3 3.3 0 0 0-.292-.082zm3.338.317l.892 1.547c-.623.251-1.149.725-1.523 1.33h-1.652c-.262-.75-.741-1.38-1.358-1.764l.623-1.082c.394.347.919.559 1.492.559a2.25 2.25 0 0 0 1.526-.59zM7.46 12.09c.574 0 1.167.073 1.518.195.867.319 1.555 1.203 1.76 2.285l.001.002v.002c.109.513.173.98.227 1.424H9.86a.386.386 0 0 0-.494 0H9.11a1.351 1.351 0 0 0-.078-.418.799.799 0 0 0 .569.238c.45 0 .814-.375.814-.828a.824.824 0 0 0-.814-.828.822.822 0 0 0-.791 1.016 1.495 1.495 0 0 0-1.18-.559c-.798 0-1.46.611-1.48 1.38h-.342a.386.386 0 0 0-.494 0H4.028c.054-.445.116-.912.224-1.425l.002-.002v-.002c.205-1.084.894-1.97 1.764-2.287h.002l.004-.002c.295-.117.863-.191 1.437-.19zm-1.91 1.105a.898.898 0 0 0-.67.348l-.119.154.307.237.119-.155a.525.525 0 0 1 .379-.197.52.52 0 0 1 .377.147l.138.136.272-.275-.137-.137a.895.895 0 0 0-.666-.258zm4.094 0a.9.9 0 0 0-.668.258l-.137.137.273.275.137-.136a.522.522 0 0 1 .377-.147.525.525 0 0 1 .379.197l.119.155.307-.237-.12-.154a.894.894 0 0 0-.667-.348zm4.222.735a.947.947 0 0 0-.707.365l-.117.154.306.237.12-.155a.568.568 0 0 1 .413-.213.571.571 0 0 1 .414.159l.14.136.27-.275-.138-.137a.942.942 0 0 0-.701-.271zm4.374 0a.942.942 0 0 0-.7.271l-.14.137.272.275.139-.136a.571.571 0 0 1 .414-.159.568.568 0 0 1 .414.213l.119.155.306-.237-.117-.154a.947.947 0 0 0-.707-.365zm-12.65.232a.824.824 0 0 0-.815.828c0 .453.365.828.814.828.45 0 .815-.375.815-.828a.824.824 0 0 0-.815-.828zm5.518.285h1.242a4.137 4.137 0 0 0-.263.864v.002c-.05.237-.092.464-.127.685h-.602a16.77 16.77 0 0 0-.236-1.5l-.002-.002c-.003-.016-.009-.032-.012-.049zm-5.519.102a.43.43 0 0 1 .426.441.43.43 0 0 1-.426.442c-.22 0-.4-.171-.422-.397a.298.298 0 0 0 .215.092.31.31 0 0 0 .305-.316.317.317 0 0 0-.129-.258c.01-.001.02-.004.031-.004zm4.014 0c.235 0 .427.193.427.441a.433.433 0 0 1-.427.442.427.427 0 0 1-.422-.405.3.3 0 0 0 .256.145.31.31 0 0 0 .304-.317.314.314 0 0 0-.207-.298c.023-.004.045-.008.069-.008zm4.304.414a.865.865 0 0 0-.856.87c0 .478.382.874.856.874a.868.868 0 0 0 .857-.873.867.867 0 0 0-.857-.871zm4.292 0a.867.867 0 0 0-.814 1.14 1.597 1.597 0 0 0-1.295-.652c-.846 0-1.546.65-1.568 1.463l-1.525.408.066.248 1.477-.394c.004.028.009.06.015.087l-1.418.817.131.222 1.367-.789c.235.552.801.94 1.455.94.66 0 1.233-.397 1.463-.957l1.398.806.13-.222-1.45-.836c.005-.025.008-.053.012-.078l1.511.404.067-.248-1.563-.418a1.438 1.438 0 0 0-.107-.5c.157.186.39.303.648.303a.867.867 0 0 0 .856-.873.865.865 0 0 0-.856-.871zm-10.567.043c.598 0 1.071.444 1.092.992h-.41c.007-.01.016-.02.023-.033a.24.24 0 0 0 .025-.22c-.005-.016-.021-.102-.05-.196a.416.416 0 0 0-.078-.156.282.282 0 0 0-.225-.108.499.499 0 0 1-.129-.031c-.062-.021-.142-.05-.248-.05-.106 0-.188.029-.25.05a.49.49 0 0 1-.127.031.29.29 0 0 0-.225.108.424.424 0 0 0-.08.156c-.029.094-.043.18-.048.195a.242.242 0 0 0 .023.22c.008.014.017.023.025.034h-.41c.02-.548.494-.992 1.092-.992zm6.275.344c.259 0 .47.211.47.484a.477.477 0 0 1-.47.486.472.472 0 0 1-.467-.453.322.322 0 0 0 .246.115c.18 0 .326-.15.326-.338a.34.34 0 0 0-.156-.289c.017-.002.033-.005.05-.005zm4.292 0c.26 0 .469.211.469.484 0 .272-.21.486-.469.486a.477.477 0 0 1-.47-.486c0-.016.002-.031.004-.047a.33.33 0 0 0 .312.24c.18 0 .326-.15.326-.338a.338.338 0 0 0-.256-.332.475.475 0 0 1 .084-.007zm-10.567.24c.021 0 .063.01.125.031.086.03.117.039.186.049.012.041.022.088.033.129a1.475 1.475 0 0 1-.168.138c-.038.028-.064.045-.088.061h-.176c-.024-.016-.052-.033-.09-.06a1.602 1.602 0 0 1-.168-.14l.034-.128c.107-.014.146-.04.185-.049a.504.504 0 0 1 .127-.031zm8.458.25c.661 0 1.184.502 1.184 1.113 0 .156-.035.304-.096.44l-.002-.024-.022-.156a2.443 2.443 0 0 0-.04-.24l-.377.093.044.274a.24.24 0 0 1-.115.074.299.299 0 0 1-.168-.014c-.087-.03-.132-.063-.18-.094.057-.037.13-.084.198-.134.08-.06.16-.123.226-.19a.542.542 0 0 0 .092-.111.245.245 0 0 0 .026-.225c-.008-.019-.022-.112-.053-.21a.444.444 0 0 0-.084-.163.286.286 0 0 0-.23-.107.566.566 0 0 1-.14-.037c-.065-.022-.152-.055-.263-.055-.11 0-.195.032-.262.055a.575.575 0 0 1-.14.037.294.294 0 0 0-.23.107.436.436 0 0 0-.083.162c-.03.1-.045.192-.052.211a.246.246 0 0 0 .025.225.534.534 0 0 0 .09.111c.066.067.146.13.226.19.068.05.138.095.194.132a.57.57 0 0 1-.18.096.305.305 0 0 1-.17.014.237.237 0 0 1-.111-.076c.008-.09.026-.177.04-.272l-.376-.094c-.032.146-.045.286-.063.409a1.052 1.052 0 0 1-.09-.428c0-.611.521-1.113 1.182-1.113zm0 .623c.026 0 .074.01.14.033.066.025.169.052.206.055l.035.156c-.04.04-.112.1-.184.152-.095.07-.14.095-.197.131-.056-.036-.1-.061-.195-.13a1.236 1.236 0 0 1-.184-.157l.035-.152a1.04 1.04 0 0 0 .206-.055.523.523 0 0 1 .138-.033zm-2.22.353a.43.43 0 0 0-.385.272l.656-.176a.416.416 0 0 0-.271-.096zm4.333 0a.414.414 0 0 0-.22.07l.603.16a.426.426 0 0 0-.383-.23zm-4.054.567l-.607.162a.436.436 0 0 0 .125.113zm3.925.002l.407.234a.443.443 0 0 0 .087-.102zm-1.986.234c.067.047.165.108.285.148a.68.68 0 0 0 .389.024.57.57 0 0 0 .232-.121 1.201 1.201 0 0 1-.904.394c-.356 0-.67-.145-.885-.375a.58.58 0 0 0 .207.102c.144.036.28.014.391-.024.12-.04.218-.1.285-.148zm-9.524 1.61v.517h6.214v-.518zm3.619 1.292v.517H15.3v-.517z"
|
|
2934
|
+
/>,
|
|
2935
|
+
);
|
|
2954
2936
|
} else if (icon === IconProp.Proxmox) {
|
|
2955
|
-
|
|
2956
|
-
* Generic hypervisor glyph — VM tiles running on a server base.
|
|
2957
|
-
* Intentionally NOT the official Proxmox logo (trademark of Proxmox
|
|
2958
|
-
* Server Solutions GmbH); follows the hand-drawn-generic convention
|
|
2959
|
-
* used for Kubernetes/Docker above.
|
|
2960
|
-
*/
|
|
2937
|
+
// Proxmox official logo mark (Simple Icons, CC0) — single filled path.
|
|
2961
2938
|
return getSvgWrapper(
|
|
2962
|
-
|
|
2963
|
-
|
|
2964
|
-
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
width="4.5"
|
|
2968
|
-
height="4.5"
|
|
2969
|
-
rx="0.5"
|
|
2970
|
-
strokeLinecap="round"
|
|
2971
|
-
strokeLinejoin="round"
|
|
2972
|
-
/>
|
|
2973
|
-
<rect
|
|
2974
|
-
x="9.75"
|
|
2975
|
-
y="4"
|
|
2976
|
-
width="4.5"
|
|
2977
|
-
height="4.5"
|
|
2978
|
-
rx="0.5"
|
|
2979
|
-
strokeLinecap="round"
|
|
2980
|
-
strokeLinejoin="round"
|
|
2981
|
-
/>
|
|
2982
|
-
<rect
|
|
2983
|
-
x="15.5"
|
|
2984
|
-
y="4"
|
|
2985
|
-
width="4.5"
|
|
2986
|
-
height="4.5"
|
|
2987
|
-
rx="0.5"
|
|
2988
|
-
strokeLinecap="round"
|
|
2989
|
-
strokeLinejoin="round"
|
|
2990
|
-
/>
|
|
2991
|
-
{/* Connectors from VMs down to the hypervisor */}
|
|
2992
|
-
<line x1="6.25" y1="8.5" x2="6.25" y2="14.5" strokeLinecap="round" />
|
|
2993
|
-
<line x1="12" y1="8.5" x2="12" y2="14.5" strokeLinecap="round" />
|
|
2994
|
-
<line x1="17.75" y1="8.5" x2="17.75" y2="14.5" strokeLinecap="round" />
|
|
2995
|
-
{/* Hypervisor / server base */}
|
|
2996
|
-
<rect
|
|
2997
|
-
x="3"
|
|
2998
|
-
y="14.5"
|
|
2999
|
-
width="18"
|
|
3000
|
-
height="5.5"
|
|
3001
|
-
rx="1"
|
|
3002
|
-
strokeLinecap="round"
|
|
3003
|
-
strokeLinejoin="round"
|
|
3004
|
-
/>
|
|
3005
|
-
<circle cx="6" cy="17.25" r="0.6" fill="currentColor" />
|
|
3006
|
-
<line x1="9" y1="17.25" x2="18" y2="17.25" strokeLinecap="round" />
|
|
3007
|
-
</>,
|
|
2939
|
+
<path
|
|
2940
|
+
fill="currentColor"
|
|
2941
|
+
stroke="none"
|
|
2942
|
+
d="M4.928 1.825c-1.09.553-1.09.64-.07 1.78 5.655 6.295 7.004 7.782 7.107 7.782.139.017 7.971-8.542 8.058-8.801.034-.07-.208-.312-.519-.536-.415-.312-.864-.433-1.712-.467-1.59-.104-2.144.242-4.115 2.455-.899 1.003-1.66 1.833-1.66 1.833-.017 0-.76-.813-1.642-1.798S8.473 2.1 8.127 1.91c-.796-.45-2.421-.484-3.2-.086zM1.297 4.367C.45 4.695 0 5.007 0 5.248c0 .121 1.331 1.678 2.94 3.459 1.625 1.78 2.939 3.268 2.939 3.302 0 .035-1.331 1.522-2.94 3.303C1.314 17.11.017 18.683.035 18.822c.086.467 1.504 1.055 2.541 1.055 1.678-.018 2.058-.312 5.603-4.202 1.78-1.954 3.233-3.614 3.233-3.666 0-.069-1.435-1.694-3.199-3.63-2.3-2.508-3.423-3.632-3.96-3.874-.812-.398-2.126-.467-2.956-.138zm18.467.12c-.502.26-1.764 1.505-3.943 3.891-1.763 1.937-3.199 3.562-3.199 3.631 0 .07 1.453 1.712 3.234 3.666 3.544 3.89 3.925 4.184 5.602 4.202 1.038 0 2.455-.588 2.542-1.055.017-.156-1.28-1.712-2.905-3.493-1.608-1.78-2.94-3.285-2.94-3.32 0-.034 1.332-1.539 2.94-3.32C22.72 6.91 24.017 5.352 24 5.214c-.087-.45-1.366-.968-2.473-1.038-.795-.034-1.21.035-1.763.312zM7.954 16.973c-2.144 2.369-3.908 4.374-3.943 4.46-.034.07.208.312.52.537.414.311.864.432 1.711.467 1.574.103 2.161-.26 4.15-2.508.864-.968 1.608-1.78 1.625-1.78s.761.812 1.643 1.798c2.023 2.248 2.559 2.576 4.132 2.49.848-.035 1.297-.156 1.712-.467.311-.225.553-.467.519-.536-.087-.26-7.92-8.819-8.058-8.801-.069 0-1.867 1.954-4.011 4.34z"
|
|
2943
|
+
/>,
|
|
3008
2944
|
);
|
|
3009
2945
|
} else if (icon === IconProp.Ceph) {
|
|
3010
|
-
|
|
3011
|
-
* Generic hexagon-cluster glyph — honeycomb of storage nodes.
|
|
3012
|
-
* Intentionally NOT the official Ceph logo (trademark of the Ceph
|
|
3013
|
-
* Foundation); follows the hand-drawn-generic convention used for
|
|
3014
|
-
* Kubernetes/Docker above.
|
|
3015
|
-
*/
|
|
2946
|
+
// Ceph official logo mark (Simple Icons, CC0) — single filled path.
|
|
3016
2947
|
return getSvgWrapper(
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
|
|
3020
|
-
|
|
3021
|
-
|
|
3022
|
-
/>
|
|
3023
|
-
<polygon
|
|
3024
|
-
points="16.4,3.6 20.04,5.7 20.04,9.9 16.4,12 12.76,9.9 12.76,5.7"
|
|
3025
|
-
strokeLinecap="round"
|
|
3026
|
-
strokeLinejoin="round"
|
|
3027
|
-
/>
|
|
3028
|
-
<polygon
|
|
3029
|
-
points="12,12 15.64,14.1 15.64,18.3 12,20.4 8.36,18.3 8.36,14.1"
|
|
3030
|
-
strokeLinecap="round"
|
|
3031
|
-
strokeLinejoin="round"
|
|
3032
|
-
/>
|
|
3033
|
-
<circle cx="7.6" cy="7.8" r="0.8" fill="currentColor" />
|
|
3034
|
-
<circle cx="16.4" cy="7.8" r="0.8" fill="currentColor" />
|
|
3035
|
-
<circle cx="12" cy="16.2" r="0.8" fill="currentColor" />
|
|
3036
|
-
</>,
|
|
2948
|
+
<path
|
|
2949
|
+
fill="currentColor"
|
|
2950
|
+
stroke="none"
|
|
2951
|
+
d="M11.959.257A11.912 11.912 0 003.503 3.76 11.92 11.92 0 000 12.217a11.934 11.934 0 001.207 5.243c.72 1.474 1.888 2.944 3.208 4.044.86-.47 1.35-.99 1.453-1.545.1-.533-.134-1.107-.737-1.805a9.031 9.031 0 01-2.219-5.937c0-4.988 4.058-9.047 9.047-9.047h.08c4.99 0 9.048 4.059 9.048 9.047a9.03 9.03 0 01-2.218 5.936c-.599.693-.84 1.292-.735 1.83.108.556.595 1.068 1.449 1.522 1.322-1.1 2.489-2.57 3.209-4.046A11.898 11.898 0 0024 12.217a11.929 11.929 0 00-3.503-8.457A11.923 11.923 0 0012.04.257h-.041zm-.005 4.837a7.072 7.072 0 00-3.76 1.075A7.202 7.202 0 006.15 8.093a7.164 7.164 0 00-1.161 2.65 7.188 7.188 0 00.04 3.125 7.14 7.14 0 001.22 2.607c.154.207.326.396.509.597l.185.202.005.006c.007.007.017.016.026.027.635.738.957 1.533.957 2.36a3.4 3.4 0 01-1.788 2.989 11.924 11.924 0 002.685 1.087c.14-.088.614-.441 1.077-1.083a4.899 4.899 0 00.94-2.99 6.595 6.595 0 00-.49-2.37 6.717 6.717 0 00-1.302-2.033l-.002-.004-.124-.142c-.21-.245-.428-.497-.602-.792a4.104 4.104 0 01-.462-1.135 4.258 4.258 0 01-.024-1.85 4.25 4.25 0 01.686-1.564 4.216 4.216 0 013.432-1.773H12.042a4.202 4.202 0 013.432 1.773c.33.466.568 1.007.686 1.565a4.27 4.27 0 01-.023 1.849c-.093.39-.249.772-.463 1.135-.173.295-.391.547-.602.792l-.123.142-.004.004a6.736 6.736 0 00-1.301 2.033 6.607 6.607 0 00-.49 2.37 4.897 4.897 0 00.94 2.99c.463.642.937.995 1.076 1.083a11.776 11.776 0 002.687-1.087 3.399 3.399 0 01-1.789-2.988c0-.817.313-1.59.956-2.359.009-.012.02-.022.027-.03l.006-.004.184-.204c.183-.2.355-.39.51-.596a7.14 7.14 0 001.22-2.608 7.21 7.21 0 00.04-3.124 7.185 7.185 0 00-1.16-2.65 7.203 7.203 0 00-2.044-1.924 7.074 7.074 0 00-3.762-1.075h-.09zM12 9.97a2.365 2.365 0 00-2.362 2.361A2.364 2.364 0 0012 14.691c1.301 0 2.36-1.059 2.36-2.36A2.364 2.364 0 0012 9.968z"
|
|
2952
|
+
/>,
|
|
3037
2953
|
);
|
|
3038
2954
|
} else if (icon === IconProp.Gauge) {
|
|
3039
2955
|
// Gauge/speedometer icon — semicircular meter with needle
|
|
@@ -183,17 +183,14 @@ const NavBarMenuModal: FunctionComponent<ComponentProps> = (
|
|
|
183
183
|
return isApplePlatform ? "⌘K" : "Ctrl K";
|
|
184
184
|
}, []);
|
|
185
185
|
|
|
186
|
-
// Filter items by the search query (title
|
|
186
|
+
// Filter items by the search query (title only).
|
|
187
187
|
const filteredItems: MoreMenuItem[] = useMemo(() => {
|
|
188
188
|
const normalizedQuery: string = query.trim().toLowerCase();
|
|
189
189
|
if (!normalizedQuery) {
|
|
190
190
|
return props.items;
|
|
191
191
|
}
|
|
192
192
|
return props.items.filter((item: MoreMenuItem) => {
|
|
193
|
-
|
|
194
|
-
item.category || ""
|
|
195
|
-
}`.toLowerCase();
|
|
196
|
-
return haystack.includes(normalizedQuery);
|
|
193
|
+
return item.title.toLowerCase().includes(normalizedQuery);
|
|
197
194
|
});
|
|
198
195
|
}, [props.items, query]);
|
|
199
196
|
|