app.registerExtension({
name: "SelectionTools",
commands: [
{
id: "selection-tools.count",
label: "選択数をカウント",
icon: "pi pi-hashtag",
function: () => {
const count = app.canvas.selectedItems?.size || 0;
app.extensionManager.toast.add({
severity: "info",
summary: "選択数",
detail: `${count} 個のアイテムが選択されています`,
life: 3000
});
}
},
{
id: "selection-tools.copy-ids",
label: "ID をコピー",
icon: "pi pi-copy",
function: () => {
const items = Array.from(app.canvas.selectedItems || []);
const ids = items.map(item => item.id).filter(id => id !== undefined);
if (ids.length > 0) {
navigator.clipboard.writeText(ids.join(', '));
app.extensionManager.toast.add({
severity: "success",
summary: "コピー済み",
detail: `${ids.length} 個の ID をクリップボードにコピーしました`,
life: 2000
});
}
}
},
{
id: "selection-tools.log-types",
label: "タイプをログ出力",
icon: "pi pi-info-circle",
function: () => {
const items = Array.from(app.canvas.selectedItems || []);
const typeCount = {};
items.forEach(item => {
const type = item.type || 'unknown';
typeCount[type] = (typeCount[type] || 0) + 1;
});
console.log("選択タイプ:", typeCount);
}
}
],
getSelectionToolboxCommands: (selectedItem) => {
const selectedItems = app.canvas.selectedItems;
const itemCount = selectedItems ? selectedItems.size : 0;
if (itemCount === 0) return [];
const commands = ["selection-tools.count", "selection-tools.log-types"];
// アイテムに ID がある場合のみコピーコマンドを表示
const hasIds = Array.from(selectedItems).some(item => item.id !== undefined);
if (hasIds) {
commands.push("selection-tools.copy-ids");
}
return commands;
}
});