OptionalVERSIONOrchestrator version tag, set by ui-api.ts:296.
OptionalBUILDBuild tag, set by ui-api.ts:297.
OptionalinitBoots the UI kernel (delegation, theme, containers).
OptionalcleanupTears listeners down and resets the delegation flag.
OptionalgetAvailability report for the UI sub-modules.
OptionalapplyApplies a theme by name.
Sets the theme classes on <body> and #geoleaf-map, then dispatches
geoleaf:ui-theme-changed. ⚠️ Always prefer this over touching the CSS classes
directly — a manual classList.add("gl-theme-dark") skips the event, so anything
listening for the change never learns of it.
OptionalsetAlias of GeoLeafUIFacade.applyTheme — the SAME reference, by design.
OptionalgetThe theme currently applied.
OptionalinitApplies the theme declared in the profile configuration. Called during boot.
OptionalinitWires a theme-toggle button, located by the configured buttonSelector.
OptionaltoggleSwitches to the other theme and applies it.
OptionalNotificationsThe notification renderer, reachable through the UI façade.
⚠️ Typed Record<string, unknown>, so nothing here is arity-checked — the real
surface is the one documented on NotificationSystem. Tracked as B-13.
OptionalshowShows a toast of an explicit type. Bound form of Notifications.show.
OptionalshowShows a success toast. Bound form of Notifications.success.
OptionalshowShows an error toast. Bound form of Notifications.error.
OptionalshowShows a warning toast. Bound form of Notifications.warning.
OptionalshowShows an informational toast. Bound form of Notifications.info.
OptionalclearDismisses every visible toast and empties the queue.
OptionalnotifyRich toast surface — the KERNEL one, mounted by globals/globals.ui.ts:151.
Distinct from GeoLeafUIFacade.Notifications: notify is the anchor-B2
adapter that reads the renderer back lazily, so a build without the
toast-renderer capability degrades to a silent no-op instead of throwing.
⚠️ Chaîner l'optionnel n'est pas de la coquetterie ici : sans écrivain, le membre
est absent, et GeoLeaf.UI.notify.success(…) jette. C'est aussi ce qui évite
d'ajouter une entrée de baseline à typecheck-docs-examples (B-202).
OptionalinitMounts the mobile toolbar. Set by globals/globals.ui.ts:207.
Initializes the mobile utility pill toolbar and sheet modal. Must be called after the map and .gl-main DOM are ready.
OptionalinitMounts the desktop side-panel. Set by globals/globals.ui.ts:208.
Builds the side panel DOM (>= 1440px). Does NOT move any element in — call activateDesktopPanel() afterwards.
OptionalactivateReveals the desktop side-panel. Set by globals/globals.ui.ts:209.
Moves the elements (filters, layers, legend) into the panels. A appeler APRES Legend.init(), LayerManager.init().
OptionaldestroyTears the desktop side-panel down. Set by globals/globals.ui.ts:210.
Destroys the side panel and restores the elements to their original place.
OptionalCacheOffline cache button — mounted by the offline-ui PLUGIN
(ui/cache-button.ts:43), read by app/boot-modules/ui.module.ts:119.
⚠️ Typé STRUCTURELLEMENT à dessein. La règle no-plugin-in-core
(scripts/verify-core-standalone.cjs) interdit au core de nommer
@geoleaf-plugins/* : un typeof import(...) est indisponible ici, et ce n'est
pas un raccourci mais la frontière d'architecture. Le membre reste optionnel —
un build sans le plugin n'a pas d'écrivain.
GeoLeaf.UI— the kernel UI façade (API publique S4.2, lot B).Pourquoi une interface écrite à la main, et pas un
typeof import(...)kernel/ui/ui-api.ts:304faitconst UI = _g.GeoLeaf.UI;puis le ré-exporte : la valeur exportée EST le membre du namespace. Untypeof import("./api/geoleaf.ui.js").UIest donc structurellement circulaire — mesuré,tscsortTS7022puisTS2303. C'est très probablement la raison pour laquelle ce membre était déclaréRecord<string, unknown>: la forme facile ne compile pas.Ce n'est pas une raison de ne rien typer. La façade est montée par mutation depuis ~10 modules ; les 24 membres ci-dessous sont relevés sur les sites d'affectation réels, et l'interface nommée rompt le cycle en ne dépendant d'aucune valeur.
B-202 (09/08/2026) — la traîne
[key: string]: unknownest RETIRÉE⚠️ Le motif qui la justifiait ici était faux. Il disait «
boot-core.tsetinit-features.tsposent encore des membres hors de cette liste ». Mesuré : ces deux fichiers ne posent aucun membre surGeoLeaf.UI— leurs seules occurrences deui.sont des lectures de config (init-features.ts:227,246). Les 6 membres qui manquaient réellement venaient deglobals/globals.ui.tset du pluginoffline-ui; ils sont déclarés ci-dessous, relevés sur leurs sites d'affectation.Ce que la traîne coûtait. Elle rendait
unknown— donc indiscernable d'un membre réel non typé — tout membre inventé.GeoLeaf.UI.toggleFilterPanel(true)était enseigné par l'@exampledeapi/geoleaf.ui.tsalors que cet identifiant n'a jamais existé dans le dépôt, et les trois gates de documentation sortaient vertes dessus. B-80 l'avait mesuré le 31/07/2026 (mutationGeoLeaf.UI.cetteApiNExistePas("dark")→ VERTE) et conclu « le bénéfice réel de B-80 croît avec B-13, et pas autrement ». Traîne ôtée, un membre fantôme rend TS2339, quetypecheck-docs-examples.cjsconnaît.Aucun site d'affectation ne casse :
globals.ui.ts:138écrit à travers_gl.UI as Record<string, unknown>,cache-button.ts:43par son propre cast, etui.module.ts:119lit par le helper dynamiquemember(obj: unknown, …).