// Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT import { useEffect, useState } from "react"; import { getColorTheme, subscribeColorTheme } from "./utils/bolt-utils"; import CodeSnippet from "./components/snippet/CodeSnippet"; import { ExportType, useInspectorStore } from "./utils/store"; import DialogFrame from "./components/DialogFrame.js"; import { Button, Checkbox, DropdownMenu, Text } from "figma-kit"; import "./main.css"; export const App = () => { const { exportsAreCurrent, title, slintSnippet, useVariables, copyToClipboard, initializeEventListeners, setUseVariables, setExportsAreCurrent, exportFiles, } = useInspectorStore(); const [_lightOrDarkMode, setLightOrDarkMode] = useState(getColorTheme()); // Init useEffect(() => { initializeEventListeners(); subscribeColorTheme((mode) => { setLightOrDarkMode(mode); }); }, []); // Debug listener useEffect(() => { const variableChangeHandler = (event: any) => { if (event.data?.pluginMessage) { const msg = event.data.pluginMessage; // Check for variable-specific event types if ( msg.type === "variableChanged" || msg.type === "variableCollectionChanged" || msg.type === "documentSnapshot" ) { setExportsAreCurrent(false); } } }; window.addEventListener("message", variableChangeHandler); return () => window.removeEventListener("message", variableChangeHandler); }, []); return ( copyToClipboard()} onKeyDown={(e) => { if (e.key === "Enter" || e.key === " ") { copyToClipboard(); } }} className="copy-icon" style={{ cursor: "pointer", marginRight: "8px" }} role="button" tabIndex={0} width="24" height="24" fill="none" viewBox="0 0 24 24" > {title || "Slint Figma Inspector"} setUseVariables(e.target.checked)} /> Use Figma Variables exportFiles(ExportType.SeparateFiles) } > Separate Files Per Collection… exportFiles(ExportType.SingleFile)} > Single Design-Tokens File… {" "} {useVariables ? ( exportsAreCurrent ? ( Exports are current ) : ( "Either variables have changed or no export found" ) ) : ( "" )} ); };