Task pane
{# xlwings Wasm #}
{% if settings.enable_wasm and not settings.is_official_lite_addin %}
{% endif %}
{# Config #}
{# htmx #}
{% if settings.enable_htmx %}
{% endif %}
{# Office.js #}
{% if settings.cdn_officejs %}
{% else %}
{% endif %}
{# Socket.io (must come before custom-scripts) #}
{% block socketio %}
{% if settings.enable_socketio %}
{% endif %}
{% endblock socketio %}
{# xlwings.js (must come before custom-function-code) #}
{% block socketio2 %}
{% if settings.enable_socketio %}
{# Must come after xlwings.js #}
{% endif %}
{% endblock socketio2 %}
{# Alpine.js CSP registry: defines globalThis.registerAlpineComponent. Loaded early (classic) #}
{# so the global exists before any custom JS (main.js/examples.js) runs. The starter module #}
{# near the end of flushes the registry and calls Alpine.start(). #}
{% if settings.enable_alpinejs_csp %}
{% endif %}
{# JS Config #}
{# prettier-ignore-start #}
{# prettier-ignore-end #}
{% block custom_functions_code %}
{% if settings.environment == "dev" or settings.enable_wasm %}
{% endif %}
{% endblock custom_functions_code %}
{# Bootstrap with the xlwings theme #}
{% if settings.enable_bootstrap %}
{% endif %}
{# Axios #}
{# Examples #}
{% if settings.enable_examples %}
{% endif %}
{# Own #}
{% block extra_head %}
{# This allows to selectively load Alpine.js components #}
{% endblock extra_head %}
{# Alpine.js CSP starter (external module, last in ): imports the ESM build, which -- #}
{# unlike the cdn build -- does NOT auto-start. It flushes the component registry on #}
{# alpine:init then calls Alpine.start(), after main.js/examples.js have registered, so every #}
{# component exists before Alpine processes the DOM. No race, no "Undefined variable" warnings. #}
{% if settings.enable_alpinejs_csp %}
{% endif %}
{% endblock head %}