diff --git a/web/src/beta/features/PluginPlayground/Code/hook.ts b/web/src/beta/features/PluginPlayground/Code/hook.ts index 85b4a8ebde..2d1b400751 100644 --- a/web/src/beta/features/PluginPlayground/Code/hook.ts +++ b/web/src/beta/features/PluginPlayground/Code/hook.ts @@ -2,6 +2,7 @@ import Visualizer from "@reearth/beta/features/Visualizer"; import { useNotification } from "@reearth/services/state"; import * as yaml from "js-yaml"; import { ComponentProps, useCallback, useState } from "react"; +import { v4 } from "uuid"; import { Story } from "../../Visualizer/Crust/StoryPanel/types"; import { WidgetLocation } from "../../Visualizer/Crust/Widgets/types"; @@ -121,7 +122,10 @@ export default ({ files, resetVisualizer }: Props) => { widgets: [ ...(areaAlignSystem.widgets ?? []), { - id: cur.id, + id: v4(), + name: cur.name, + extensionId: cur.id, + pluginId: ymlJson.id, __REEARTH_SOURCECODE: file.sourceCode, extended } diff --git a/web/src/beta/features/PluginPlayground/Plugins/presets/communication/extensionExtensionMessenger.ts b/web/src/beta/features/PluginPlayground/Plugins/presets/communication/extensionExtensionMessenger.ts new file mode 100644 index 0000000000..dae2023530 --- /dev/null +++ b/web/src/beta/features/PluginPlayground/Plugins/presets/communication/extensionExtensionMessenger.ts @@ -0,0 +1,247 @@ +import { FileType, PluginType } from "../../constants"; +import { PRESET_PLUGIN_COMMON_STYLE } from "../common"; + +// YAML File Definition +const yamlFile: FileType = { + id: "extension-to-extension-messenger-reearth-yml", + title: "reearth.yml", + sourceCode: `id: extension-to-extension-messenger-plugin +name: Extension To Extension Messenger +version: 1.0.0 +extensions: + - id: extension-1 + type: widget + name: Extension 1 + description: Extension 1 Widget + - id: extension-2 + type: widget + name: Extension 2 + description: Extension 2 Widget +`, + disableEdit: true, + disableDelete: true +}; + +// Extension 1 Widget Source Code +const extension1SourceCode = ` +reearth.ui.show(\` + ${PRESET_PLUGIN_COMMON_STYLE} + + +
Latitude: -°
Longitude: -°
@@ -89,6 +122,14 @@ const widgetFile: FileType = { alt: 1000 // Fixed camera height for better viewing }, "*"); }); + + // Toggle info section + document.getElementById("info-toggle").addEventListener("click", () => { + const infoContent = document.getElementById("info-content"); + const isHidden = infoContent.style.display === "none"; + infoContent.style.display = isHidden ? "block" : "none"; + document.getElementById("info-toggle").textContent = isHidden ? "Hide Info" : "Show Info"; + }); \`); diff --git a/web/src/beta/features/PluginPlayground/Plugins/presets/index.ts b/web/src/beta/features/PluginPlayground/Plugins/presets/index.ts index ed98442282..e525e42eb0 100644 --- a/web/src/beta/features/PluginPlayground/Plugins/presets/index.ts +++ b/web/src/beta/features/PluginPlayground/Plugins/presets/index.ts @@ -1,5 +1,7 @@ import { PluginType } from "../constants"; +import { extensionExtensionMessenger } from "./communication/extensionExtensionMessenger"; +import { uiExtensionMessenger } from "./communication/uiExtensionMessenger"; import { myPlugin } from "./custom/myPlugin"; import { add3dTiles } from "./layers/add-3Dtiles"; import { addCsv } from "./layers/add-csv"; @@ -13,7 +15,6 @@ import { hideFlyToDeleteLayer } from "./layers/hideFlyToDeleteLayer"; import { header } from "./ui/header"; import { responsivePanel } from "./ui/responsivePanel"; import { sidebar } from "./ui/sidebar"; -import { uiExtensionMessenger } from "./ui/uiExtensionMessenger"; type PresetPluginCategory = { id: string; @@ -37,7 +38,7 @@ export const presetPlugins: PresetPlugins = [ { id: "communication", title: "Communication", - plugins: [uiExtensionMessenger] + plugins: [uiExtensionMessenger, extensionExtensionMessenger] }, { id: "viewerScene", diff --git a/web/src/beta/features/Visualizer/Crust/Plugins/Plugin/hooks/usePluginAPI.ts b/web/src/beta/features/Visualizer/Crust/Plugins/Plugin/hooks/usePluginAPI.ts index 12c849a508..b5cc6ec98c 100644 --- a/web/src/beta/features/Visualizer/Crust/Plugins/Plugin/hooks/usePluginAPI.ts +++ b/web/src/beta/features/Visualizer/Crust/Plugins/Plugin/hooks/usePluginAPI.ts @@ -116,6 +116,7 @@ export function usePluginAPI({ uiEvents.current = events