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 _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 _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);
}
import { useStyleRegister } from "@ant-design/cssinjs";
import { genStyleUtils } from "@ant-design/cssinjs-utils";
import { ConfigProvider as AntdConfigProvider, theme as antdTheme } from "antd";
import { useContext } from "react";
export var resetComponent = function resetComponent(token) {
    return _define_property({}, "".concat(token.componentCls), {
        boxSizing: 'border-box',
        margin: 0,
        padding: 0,
        color: token.colorText,
        fontSize: '1em',
        lineHeight: token.lineHeight,
        listStyle: 'none',
        'svg.sofa-icons-icon > g': {
            clipPath: 'none!important'
        }
    });
};
/**
 * 基于 antd cssinjs-utils 构建的 genStyleHooks 工厂。
 *
 * 与 antd 内部 `theme/util/genStyleUtils` 同源，区别仅在于：
 *   1. 使用 agentic-ui 自有的 ComponentTokenMap（可自由扩展）
 *   2. hashId 始终为空字符串，避免与宿主 antd 主题 hashId 叠加导致选择器失效
 *      —— 组件库选择器需对消费方稳定，不能随主题哈希变化
 */ var styleUtils = genStyleUtils({
    usePrefix: function usePrefix() {
        var _useContext = useContext(AntdConfigProvider.ConfigContext), getPrefixCls = _useContext.getPrefixCls, iconPrefixCls = _useContext.iconPrefixCls;
        return {
            rootPrefixCls: getPrefixCls(),
            iconPrefixCls: iconPrefixCls !== null && iconPrefixCls !== void 0 ? iconPrefixCls : 'anticon'
        };
    },
    useToken: function useToken() {
        var _antdTheme_useToken = antdTheme.useToken(), theme = _antdTheme_useToken.theme, token = _antdTheme_useToken.token;
        return {
            theme: theme,
            realToken: token,
            // 组件库默认关闭 hashId，避免与宿主 antd hashId 叠加。
            hashId: '',
            token: token
        };
    },
    useCSP: function useCSP() {
        var csp = useContext(AntdConfigProvider.ConfigContext).csp;
        return csp !== null && csp !== void 0 ? csp : {};
    }
});
/**
 * `wrapSSR` 在我们的配置下是死代码：
 *
 * - 浏览器（CSR）里 cssinjs 的 `wrapSSR` 永远等价于 `<><Empty/>{node}</>`
 *   （`Empty` 是 `() => null`），样式注入靠 `useGlobalCache` 内的 `updateCSS`
 *   副作用完成，与 `wrapSSR` 无关；
 * - 我们的 `hashId` 强制为空，`wrapSSR` 也不会在节点上注入任何 className；
 * - 仅在 `<StyleProvider ssrInline>` 这种 SSR 内联模式下 `wrapSSR` 才会真正
 *   emit `<style>` 标签，但组件库从未承诺该模式，整个仓库也没有相关入口。
 *
 * 因此对外暴露的 `wrapSSR` 直接返回 identity，避免每次渲染白白创建一层
 * Fragment + `<Empty/>`。保留在返回元组里仅为兼容旧调用方
 * `const { wrapSSR, hashId } = useStyle(...); return wrapSSR(<jsx/>)`。
 */ var identityWrapSSR = function identityWrapSSR(node) {
    return node;
};
/**
 * 注册组件样式（含 antCls / iconCls / 计算工具），返回 `useStyle(prefixCls)`。
 *
 * 与 antd `genStyleHooks` 行为一致：
 *   - 顶层调用一次，签名 `(prefixCls, rootCls?) => [wrapSSR, hashId, cssVarCls]`
 *   - styleFn 接收的 token 含 `componentCls`、`prefixCls`、`antCls` 等
 *   - **wrapSSR 为 identity 函数**（见 {@link identityWrapSSR} 说明）
 *
 * @example
 * ```ts
 * import { genStyleHooks } from '../Hooks/useStyle';
 *
 * const genStyle: GenStyleFn<'Bubble'> = (token) => ({
 *   [token.componentCls]: { padding: token.padding },
 * });
 *
 * export const useStyle = genStyleHooks('Bubble', genStyle);
 * ```
 */ export var genStyleHooks = function genStyleHooks(component, styleFn, getDefaultToken, options) {
    var inner = styleUtils.genStyleHooks(component, styleFn, getDefaultToken, options);
    // 仍然调用原 hook 触发样式注册副作用（updateCSS 注入 document.head），
    // 但用 identityWrapSSR 替换其返回的 wrapSSR。
    return function(prefixCls, rootCls) {
        var _inner = _sliced_to_array(inner(prefixCls, rootCls), 3), hashId = _inner[1], cssVarCls = _inner[2];
        return [
            identityWrapSSR,
            hashId,
            cssVarCls
        ];
    };
};
/**
 * 同 antd `genComponentStyleHook`：与 `genStyleHooks` 类似，但不接管 CSS Var 注册，
 * 返回 `[wrapSSR, hashId]`。在子样式 / 不需要 CSS Var 的场景使用。
 *
 * 同样把 `wrapSSR` 替换为 identity。
 */ export var genComponentStyleHook = function genComponentStyleHook(component, styleFn, getDefaultToken, options) {
    var inner = styleUtils.genComponentStyleHook(component, styleFn, getDefaultToken, options);
    return function(prefixCls, rootCls) {
        var _inner = _sliced_to_array(inner(prefixCls, rootCls), 2), hashId = _inner[1];
        return [
            identityWrapSSR,
            hashId
        ];
    };
};
/**
 * 同 antd `genSubStyleComponent`：返回一个 SubStyle 组件，用于在父组件内挂载子样式。
 */ export var genSubStyleComponent = styleUtils.genSubStyleComponent;
/**
 * 兼容旧版的 useStyle 注册器。
 *
 * 新代码请改用 `genStyleHooks`；本函数仅为已有 style.ts 调用点保留。
 * 内部直接调用 cssinjs 的 `useStyleRegister`，与 `genComponentStyleHook` 同源，
 * 因此即便不迁移调用点，样式注入路径也已统一在 antd cssinjs 之上。
 *
 * @param componentName 组件名（用作 cssinjs cache path）
 * @param styleFn 生成样式的函数，token 由调用方按需附加 `componentCls`
 */ export function useEditorStyleRegister(componentName, styleFn) {
    var _antdTheme_useToken = antdTheme.useToken(), theme = _antdTheme_useToken.theme, token = _antdTheme_useToken.token;
    var _useContext = useContext(AntdConfigProvider.ConfigContext), getPrefixCls = _useContext.getPrefixCls, csp = _useContext.csp;
    var chatToken = _object_spread_props(_object_spread({}, token), {
        chatCls: ".".concat(getPrefixCls('agentic-ui')),
        antCls: ".".concat(getPrefixCls())
    });
    // 调用 useStyleRegister 是为了触发 cssinjs 的样式注册副作用（updateCSS
    // 注入到 document.head）；返回的 wrapSSR 在我们的配置下是无意义 Fragment 包装
    // （详见 identityWrapSSR 注释），故直接丢弃，对外暴露 identity 维持 API 形状。
    useStyleRegister({
        theme: theme,
        token: chatToken,
        hashId: '',
        path: [
            componentName
        ],
        // 缺省 nonce 时透传 undefined，避免在 <style> 上 emit nonce=""
        // —— 严格 CSP 策略下空 nonce 会被解读为「无值」并被拒绝
        nonce: (csp === null || csp === void 0 ? void 0 : csp.nonce) ? function() {
            return csp.nonce;
        } : undefined
    }, function() {
        return styleFn(chatToken);
    });
    return {
        wrapSSR: identityWrapSSR,
        hashId: ''
    };
}
