GeoLeaf Core API - v3.19.0
    Preparing search index...

    Interface LazyUISlotEntry

    A lazy-plugin UI slot stored by action name and surfaced to toolbar renderers.

    interface LazyUISlotEntry {
        mobileIcon?: PluginUIDescriptor;
        desktopTabButton?: PluginDesktopTabDescriptor;
        gateOnModuleEnabled?: boolean;
        id: string;
        pluginName: string;
    }

    Hierarchy (View Summary)

    Index
    mobileIcon?: PluginUIDescriptor
    desktopTabButton?: PluginDesktopTabDescriptor
    gateOnModuleEnabled?: boolean

    Hide this slot when modules.<pluginName>.enabled is explicitly false.

    🛑 OPT-IN, AND THAT IS THE POINT: the guard only applies to plugins whose entry.ts already carries it. Measured on 20/08/2026: of the six lazy-slot plugins, only three wrap their registration in if (getXConfig().enabled !== false) — print, measure, editor. The other three (table, geocoding, position-share) register unconditionally, and that is no oversight: their enabled does not mean "feature absent".

    ⚠️ The counter-example that made this an opt-in rather than a uniform rule: profiles/tourism declares position-share: { enabled: false, showButton: true }. For that plugin, enabled governs EMISSION, and the button IS the switch that turns it on (PS-09). A uniform guard hid a button the profile explicitly asks for — and removed the only way to activate the feature.

    The flag cannot be evaluated at declaration time: registerLazyForAction runs in init.js before the profile loads. It is therefore read at RENDER time.

    id: string
    pluginName: string