function _array_like_to_array(arr, len) {
    if (len == null || len > arr.length) len = arr.length;
    for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
    return arr2;
}
function _array_with_holes(arr) {
    if (Array.isArray(arr)) return arr;
}
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
    try {
        var info = gen[key](arg);
        var value = info.value;
    } catch (error) {
        reject(error);
        return;
    }
    if (info.done) {
        resolve(value);
    } else {
        Promise.resolve(value).then(_next, _throw);
    }
}
function _async_to_generator(fn) {
    return function() {
        var self = this, args = arguments;
        return new Promise(function(resolve, reject) {
            var gen = fn.apply(self, args);
            function _next(value) {
                asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
            }
            function _throw(err) {
                asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
            }
            _next(undefined);
        });
    };
}
function _define_property(obj, key, value) {
    if (key in obj) {
        Object.defineProperty(obj, key, {
            value: value,
            enumerable: true,
            configurable: true,
            writable: true
        });
    } else {
        obj[key] = value;
    }
    return obj;
}
function _instanceof(left, right) {
    if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
        return !!right[Symbol.hasInstance](left);
    } else {
        return left instanceof right;
    }
}
function _iterable_to_array_limit(arr, i) {
    var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
    if (_i == null) return;
    var _arr = [];
    var _n = true;
    var _d = false;
    var _s, _e;
    try {
        for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
            _arr.push(_s.value);
            if (i && _arr.length === i) break;
        }
    } catch (err) {
        _d = true;
        _e = err;
    } finally{
        try {
            if (!_n && _i["return"] != null) _i["return"]();
        } finally{
            if (_d) throw _e;
        }
    }
    return _arr;
}
function _non_iterable_rest() {
    throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _object_spread(target) {
    for(var i = 1; i < arguments.length; i++){
        var source = arguments[i] != null ? arguments[i] : {};
        var ownKeys = Object.keys(source);
        if (typeof Object.getOwnPropertySymbols === "function") {
            ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
                return Object.getOwnPropertyDescriptor(source, sym).enumerable;
            }));
        }
        ownKeys.forEach(function(key) {
            _define_property(target, key, source[key]);
        });
    }
    return target;
}
function ownKeys(object, enumerableOnly) {
    var keys = Object.keys(object);
    if (Object.getOwnPropertySymbols) {
        var symbols = Object.getOwnPropertySymbols(object);
        if (enumerableOnly) {
            symbols = symbols.filter(function(sym) {
                return Object.getOwnPropertyDescriptor(object, sym).enumerable;
            });
        }
        keys.push.apply(keys, symbols);
    }
    return keys;
}
function _object_spread_props(target, source) {
    source = source != null ? source : {};
    if (Object.getOwnPropertyDescriptors) {
        Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
    } else {
        ownKeys(Object(source)).forEach(function(key) {
            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
        });
    }
    return target;
}
function _sliced_to_array(arr, i) {
    return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
}
function _unsupported_iterable_to_array(o, minLen) {
    if (!o) return;
    if (typeof o === "string") return _array_like_to_array(o, minLen);
    var n = Object.prototype.toString.call(o).slice(8, -1);
    if (n === "Object" && o.constructor) n = o.constructor.name;
    if (n === "Map" || n === "Set") return Array.from(n);
    if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
}
function _ts_generator(thisArg, body) {
    var f, y, t, _ = {
        label: 0,
        sent: function() {
            if (t[0] & 1) throw t[1];
            return t[1];
        },
        trys: [],
        ops: []
    }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
    return d(g, "next", {
        value: verb(0)
    }), d(g, "throw", {
        value: verb(1)
    }), d(g, "return", {
        value: verb(2)
    }), typeof Symbol === "function" && d(g, Symbol.iterator, {
        value: function() {
            return this;
        }
    }), g;
    function verb(n) {
        return function(v) {
            return step([
                n,
                v
            ]);
        };
    }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while(g && (g = 0, op[0] && (_ = 0)), _)try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [
                op[0] & 2,
                t.value
            ];
            switch(op[0]){
                case 0:
                case 1:
                    t = op;
                    break;
                case 4:
                    _.label++;
                    return {
                        value: op[1],
                        done: false
                    };
                case 5:
                    _.label++;
                    y = op[1];
                    op = [
                        0
                    ];
                    continue;
                case 7:
                    op = _.ops.pop();
                    _.trys.pop();
                    continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
                        _ = 0;
                        continue;
                    }
                    if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
                        _.label = op[1];
                        break;
                    }
                    if (op[0] === 6 && _.label < t[1]) {
                        _.label = t[1];
                        t = op;
                        break;
                    }
                    if (t && _.label < t[2]) {
                        _.label = t[2];
                        _.ops.push(op);
                        break;
                    }
                    if (t[2]) _.ops.pop();
                    _.trys.pop();
                    continue;
            }
            op = body.call(thisArg, _);
        } catch (e) {
            op = [
                6,
                e
            ];
            y = 0;
        } finally{
            f = t = 0;
        }
        if (op[0] & 5) throw op[1];
        return {
            value: op[0] ? op[1] : void 0,
            done: true
        };
    }
}
var mermaidLoader = null;
var COLOR_DARKNESS_THRESHOLD = 145;
var DEFAULT_LIGHT_BACKGROUND = '#ffffff';
var DEFAULT_DARK_BACKGROUND = '#141414';
var DEFAULT_LIGHT_TEXT_COLOR = '#1f1f1f';
var DEFAULT_DARK_TEXT_COLOR = '#f5f5f5';
var DEFAULT_LIGHT_SECONDARY_TEXT_COLOR = '#595959';
var DEFAULT_DARK_SECONDARY_TEXT_COLOR = '#bfbfbf';
var DEFAULT_LIGHT_BORDER_COLOR = '#d9d9d9';
var DEFAULT_DARK_BORDER_COLOR = '#434343';
var DEFAULT_PRIMARY_COLOR = '#1677ff';
var DEFAULT_FONT_FAMILY = 'Inter, -apple-system, Segoe UI, sans-serif';
/**
 * 与宿主样式共存：流程图默认用 foreignObject 画 HTML 标签，易被外层 CSS 影响；
 * 顶层与 flowchart 同时关闭 htmlLabels，强制走 SVG 文本（Mermaid 11 读取二者之一）。
 */ var MERMAID_BASE_INIT = {
    startOnLoad: false,
    htmlLabels: false,
    flowchart: {
        htmlLabels: false
    }
};
var parseColorToRgb = function parseColorToRgb(color) {
    var normalizedColor = color.trim().toLowerCase();
    var shortHexMatch = normalizedColor.match(/^#([0-9a-f]{3})$/i);
    if (shortHexMatch) {
        var _shortHexMatch__split_map = _sliced_to_array(shortHexMatch[1].split('').map(function(char) {
            return Number.parseInt(char + char, 16);
        }), 3), r = _shortHexMatch__split_map[0], g = _shortHexMatch__split_map[1], b = _shortHexMatch__split_map[2];
        return {
            r: r,
            g: g,
            b: b
        };
    }
    var hexMatch = normalizedColor.match(/^#([0-9a-f]{6})$/i);
    if (hexMatch) {
        return {
            r: Number.parseInt(hexMatch[1].slice(0, 2), 16),
            g: Number.parseInt(hexMatch[1].slice(2, 4), 16),
            b: Number.parseInt(hexMatch[1].slice(4, 6), 16)
        };
    }
    var rgbMatch = normalizedColor.match(/^rgba?\((\d{1,3})[\s,]+(\d{1,3})[\s,]+(\d{1,3})(?:[\s,]+[\d.]+)?\)$/i);
    if (rgbMatch) {
        return {
            r: Number.parseInt(rgbMatch[1], 10),
            g: Number.parseInt(rgbMatch[2], 10),
            b: Number.parseInt(rgbMatch[3], 10)
        };
    }
    return null;
};
var isDarkBackground = function isDarkBackground(color) {
    if (!color) {
        return false;
    }
    var rgbColor = parseColorToRgb(color);
    if (!rgbColor) {
        return false;
    }
    var brightness = (rgbColor.r * 299 + rgbColor.g * 587 + rgbColor.b * 114) / 1000;
    return brightness < COLOR_DARKNESS_THRESHOLD;
};
var isLightTextColor = function isLightTextColor(color) {
    if (!color) {
        return false;
    }
    var rgbColor = parseColorToRgb(color);
    if (!rgbColor) {
        return false;
    }
    var brightness = (rgbColor.r * 299 + rgbColor.g * 587 + rgbColor.b * 114) / 1000;
    return brightness >= COLOR_DARKNESS_THRESHOLD;
};
var inferDarkMode = function inferDarkMode(token) {
    if (isDarkBackground(token.colorBgContainer)) {
        return true;
    }
    // Fallback for CSS variables / unresolved background colors.
    return isLightTextColor(token.colorText);
};
export var createMermaidThemeConfig = function createMermaidThemeConfig() {
    var token = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
    var darkMode = inferDarkMode(token);
    var background = token.colorBgContainer ? token.colorBgContainer : darkMode ? DEFAULT_DARK_BACKGROUND : DEFAULT_LIGHT_BACKGROUND;
    var elevatedBackground = token.colorBgElevated || (darkMode ? '#1f1f1f' : '#fafafa');
    var textColor = token.colorText ? token.colorText : darkMode ? DEFAULT_DARK_TEXT_COLOR : DEFAULT_LIGHT_TEXT_COLOR;
    var secondaryTextColor = token.colorTextSecondary ? token.colorTextSecondary : darkMode ? DEFAULT_DARK_SECONDARY_TEXT_COLOR : DEFAULT_LIGHT_SECONDARY_TEXT_COLOR;
    var borderColor = token.colorBorder ? token.colorBorder : darkMode ? DEFAULT_DARK_BORDER_COLOR : DEFAULT_LIGHT_BORDER_COLOR;
    var primaryColor = token.colorPrimary || DEFAULT_PRIMARY_COLOR;
    var fontFamily = token.fontFamily || DEFAULT_FONT_FAMILY;
    var themeVariables = {
        primaryColor: primaryColor,
        primaryTextColor: textColor,
        primaryBorderColor: borderColor,
        lineColor: borderColor,
        mainBkg: background,
        secondBkg: elevatedBackground,
        tertiaryColor: elevatedBackground,
        background: background,
        textColor: textColor,
        fontFamily: fontFamily,
        clusterBkg: elevatedBackground,
        clusterBorder: borderColor,
        edgeLabelBackground: background,
        edgeLabelTextColor: secondaryTextColor,
        nodeBkg: background,
        nodeBorder: borderColor,
        defaultLinkColor: borderColor,
        titleColor: textColor,
        actorBkg: elevatedBackground,
        actorBorder: borderColor,
        actorTextColor: textColor,
        actorLineColor: borderColor,
        signalColor: secondaryTextColor,
        signalTextColor: textColor,
        labelBoxBkgColor: background,
        labelBoxBorderColor: borderColor,
        labelTextColor: textColor,
        loopTextColor: textColor,
        noteBkg: elevatedBackground,
        noteBorderColor: borderColor,
        noteTextColor: textColor,
        activationBorderColor: borderColor,
        activationBkgColor: elevatedBackground,
        sequenceNumberColor: textColor
    };
    var cacheKey = [
        darkMode ? 'dark' : 'light',
        background,
        elevatedBackground,
        textColor,
        secondaryTextColor,
        borderColor,
        primaryColor,
        fontFamily
    ].join('|');
    return {
        cacheKey: cacheKey,
        darkMode: darkMode,
        themeVariables: themeVariables
    };
};
export var applyMermaidTheme = function applyMermaidTheme(api, themeConfig) {
    if (!(api === null || api === void 0 ? void 0 : api.initialize)) {
        return;
    }
    if (!themeConfig) {
        api.initialize(_object_spread({}, MERMAID_BASE_INIT));
        return;
    }
    api.initialize(_object_spread_props(_object_spread({}, MERMAID_BASE_INIT), {
        theme: 'base',
        darkMode: themeConfig.darkMode,
        themeVariables: themeConfig.themeVariables
    }));
};
/**
 * 加载 Mermaid 库
 * 使用单例模式确保只加载一次，并初始化配置
 */ export var loadMermaid = function loadMermaid() {
    return _async_to_generator(function() {
        return _ts_generator(this, function(_state) {
            if (typeof window === 'undefined') {
                throw new Error('Mermaid 仅在浏览器环境中可用');
            }
            if (!mermaidLoader) {
                // 使用 webpack 魔法注释确保正确代码分割和解析
                // webpackChunkName 指定 chunk 名称，webpackMode 指定加载模式
                mermaidLoader = import(/* webpackChunkName: "mermaid" */ /* webpackMode: "lazy" */ "mermaid").then(function(module) {
                    var api = module.default;
                    applyMermaidTheme(api);
                    return api;
                }).catch(function(error) {
                    mermaidLoader = null;
                    throw error;
                });
            }
            return [
                2,
                mermaidLoader
            ];
        });
    })();
};
/**
 * 渲染 SVG 到容器
 */ export var renderSvgToContainer = function renderSvgToContainer(svg, container) {
    container.innerHTML = '';
    var wrapper = document.createElement('div');
    wrapper.setAttribute('data-mermaid-wrapper', 'true');
    wrapper.style.display = 'flex';
    var parser = new DOMParser();
    var svgDoc = parser.parseFromString(svg, 'image/svg+xml');
    var svgElement = svgDoc.querySelector('svg');
    if (svgElement) {
        var existingStyle = svgElement.getAttribute('style') || '';
        var newStyle = "".concat(existingStyle, "; display: block; max-width: 100%; width: 100%; height: auto; overflow: visible;").trim();
        svgElement.setAttribute('style', newStyle);
        svgElement.setAttribute('data-mermaid-svg', 'true');
        svgElement.setAttribute('class', (svgElement.getAttribute('class') || '') + ' mermaid-isolated');
        var allElements = svgElement.querySelectorAll('*');
        allElements.forEach(function(el) {
            if (_instanceof(el, SVGElement)) {
                el.setAttribute('data-mermaid-internal', 'true');
            }
        });
        wrapper.appendChild(svgElement);
    } else {
        var tempDiv = document.createElement('div');
        tempDiv.innerHTML = svg;
        var extractedSvg = tempDiv.querySelector('svg');
        if (extractedSvg) {
            extractedSvg.setAttribute('style', 'display: block; max-width: 100%; width: 100%; height: auto; overflow: visible;');
            extractedSvg.setAttribute('data-mermaid-svg', 'true');
            wrapper.appendChild(extractedSvg);
        } else {
            wrapper.innerHTML = svg;
        }
    }
    container.appendChild(wrapper);
};
/**
 * 清理 Mermaid 生成的临时元素
 */ export var cleanupTempElement = function cleanupTempElement(id) {
    var tempElement = document.querySelector('#d' + id);
    if (tempElement) {
        tempElement.classList.add('hidden');
        try {
            if (tempElement.parentNode) {
                tempElement.parentNode.removeChild(tempElement);
            }
        } catch (e) {
        // 忽略移除失败
        }
    }
};
