const ICON_BASE = new URL("../assets/gmoccapy-icons/", import.meta.url).href; const ICONS = { tbtn_estop: { active: icon("main_switch_on", "img_emergency__main_switch_on__48.png"), inactive: icon("main_switch_off", "img_emergency_off__main_switch_off__48.png"), default: icon("main_switch_on", "img_emergency__main_switch_on__48.png"), }, tbtn_on: { active: icon("power_on", "img_machine_on__power_on__48.png"), inactive: icon("power_off", "img_machine_off__power_off__48.png"), default: icon("power_off", "img_machine_off__power_off__48.png"), }, rbt_manual: { active: icon("mode_manual_active", "img_manual_on__mode_manual_active__48.png"), inactive: icon("mode_manual_inactive", "img_manual__mode_manual_inactive__48.png"), default: icon("mode_manual_inactive", "img_manual__mode_manual_inactive__48.png"), }, rbt_mdi: { active: icon("mode_mdi_active", "img_mdi_on__mode_mdi_active__48.png"), inactive: icon("mode_mdi_inactive", "img_mdi__mode_mdi_inactive__48.png"), default: icon("mode_mdi_inactive", "img_mdi__mode_mdi_inactive__48.png"), }, rbt_auto: { active: icon("mode_auto_active", "img_auto_on__mode_auto_active__48.png"), inactive: icon("mode_auto_inactive", "img_auto__mode_auto_inactive__48.png"), default: icon("mode_auto_inactive", "img_auto__mode_auto_inactive__48.png"), }, tbtn_setup: { active: icon("mode_settings_active", "img_settings_on__mode_settings_active__48.png"), inactive: icon("mode_settings_inactive", "img_settings__mode_settings_inactive__48.png"), default: icon("mode_settings_inactive", "img_settings__mode_settings_inactive__48.png"), }, tbtn_user_tabs: { active: icon("mode_user_tabs_active", "img_user_tabs_on__mode_user_tabs_active__48.png"), inactive: icon("mode_user_tabs_inactive", "img_user_tabs__mode_user_tabs_inactive__48.png"), default: icon("mode_user_tabs_inactive", "img_user_tabs__mode_user_tabs_inactive__48.png"), }, btn_load: { default: icon("open_file", "img_open__open_file__32.svg") }, btn_reload: { default: icon("refresh", "img_reload1__refresh__32.png") }, btn_run: { default: icon("play", "img_run__play__32.png") }, btn_stop: { default: icon("stop", "img_stop__stop__32.png") }, tbtn_pause: { active: icon("pause_active", "img_pause_active__pause_active__32.png"), inactive: icon("pause", "img_pause__pause__32.png"), default: icon("pause", "img_pause__pause__32.png"), }, btn_step: { default: icon("step", "img_step__step__32.png") }, btn_homing: { default: icon("ref_all", "img_ref_menu__ref_all__48.png") }, btn_tool: { default: icon("hsk_mill_tool", "img_tools__hsk_mill_tool__48.png") }, btn_touch: { default: icon("touch_off", "img_touch_off__touch_off__48.png") }, ref_all: { default: icon("ref_all", "img_ref_all__ref_all__48.png") }, btn_fullscreen: { active: icon("fullscreen_close", "img_fullsize_preview0_close__fullscreen_close__48.png"), inactive: icon("fullscreen_open", "img_fullsize_preview0_open__fullscreen_open__48.png"), default: icon("fullscreen_open", "img_fullsize_preview0_open__fullscreen_open__48.png"), }, rbt_forward: { active: icon("spindle_right_on", "img_spindle_forward_on__spindle_right_on__48.png"), inactive: icon("spindle_right", "img_spindle_forward__spindle_right__48.png"), default: icon("spindle_right", "img_spindle_forward__spindle_right__48.png"), }, rbt_reverse: { active: icon("spindle_left_on", "img_spindle_reverse_on__spindle_left_on__48.png"), inactive: icon("spindle_left", "img_spindle_reverse__spindle_left__48.png"), default: icon("spindle_left", "img_spindle_reverse__spindle_left__48.png"), }, rbt_stop: { active: icon("spindle_stop_on", "img_spindle_stop_on__spindle_stop_on__48.png"), inactive: icon("spindle_stop", "img_spindle_stop__spindle_stop__48.png"), default: icon("spindle_stop_on", "img_spindle_stop_on__spindle_stop_on__48.png"), }, tbtn_flood: { active: icon("coolant_flood_active", "img_coolant_on__coolant_flood_active__48.png"), inactive: icon("coolant_flood_inactive", "img_coolant_off__coolant_flood_inactive__48.png"), default: icon("coolant_flood_inactive", "img_coolant_off__coolant_flood_inactive__48.png"), }, tbtn_mist: { active: icon("coolant_mist_active", "img_mist_on__coolant_mist_active__48.png"), inactive: icon("coolant_mist_inactive", "img_mist_off__coolant_mist_inactive__48.png"), default: icon("coolant_mist_inactive", "img_mist_off__coolant_mist_inactive__48.png"), }, btn_zoom_in: { default: icon("zoom_in", "img_zoom_in__zoom_in__24.png") }, btn_zoom_out: { default: icon("zoom_out", "img_zoom_out__zoom_out__24.png") }, rbt_view_x: { default: icon("tool_axis_x", "img_view_x__tool_axis_x__24.png") }, rbt_view_y: { default: icon("tool_axis_y", "img_view_y__tool_axis_y__24.png") }, rbt_view_z: { default: icon("tool_axis_z", "img_view_z__tool_axis_z__24.png") }, rbt_view_p: { default: icon("tool_axis_p", "img_view_p__tool_axis_p__24.png") }, tbtn_view_tool_path: { default: icon("toolpath", "img_tool_path__toolpath__24.png") }, tbtn_view_dimension: { default: icon("dimensions", "img_dimensions__dimensions__24.png") }, btn_exit: { default: icon("logout", "img_close__logout__48.png") }, btn_save_session: { default: icon("save", "img_tool_save__save__32.png") }, }; export const GMOCAPY_ICON_REGISTRY_BOUNDARY = "gmoccapy_icon_registry_from_working3_manifest_core_ui_subset"; export function getGmoccapyIcon(buttonId, variant = "default") { const variants = ICONS[buttonId] || null; const fallback = { buttonId, variant, iconName: "text_fallback", path: null, fallback: true, semanticBoundary: GMOCAPY_ICON_REGISTRY_BOUNDARY, }; if (!variants) return fallback; const normalizedVariant = normalizeVariant(variant); const resolved = variants[normalizedVariant] || variants.default || variants.inactive || variants.active || null; if (!resolved) return fallback; return { buttonId, variant: normalizedVariant, ...resolved, fallback: false, semanticBoundary: GMOCAPY_ICON_REGISTRY_BOUNDARY, }; } export function listGmoccapyIconRegistryEntries() { return Object.entries(ICONS).flatMap(([buttonId, variants]) => ( Object.entries(variants).map(([variant, entry]) => ({ buttonId, variant, ...entry, semanticBoundary: GMOCAPY_ICON_REGISTRY_BOUNDARY, })) )); } function icon(iconName, filename) { return { iconName, filename, path: `${ICON_BASE}${filename}`, }; } function normalizeVariant(variant) { if (variant === true) return "active"; if (variant === false) return "inactive"; const value = String(variant || "default").toLowerCase(); if (["active", "on", "selected", "state_on", "paused", "fullscreen active"].includes(value)) return "active"; if (["inactive", "off", "default", "state_estop_reset"].includes(value)) return value === "default" ? "default" : "inactive"; return value; }