@chatbi-v/core 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ var s=class{config=new Map;set(t,e){this.config.set(t,e)}get(t){return this.config.get(t)}merge(t){Object.keys(t).forEach(e=>{let i=this.config.get(e),n=t[e];i&&typeof i=="object"&&n&&typeof n=="object"?this.config.set(e,{...i,...n}):this.config.set(e,n)})}getAll(){return Object.fromEntries(this.config)}},c=new s;export{s as a,c as b};
@@ -0,0 +1 @@
1
+ import{a,b}from"./chunk-O74KYN5N.mjs";export{a as ConfigManager,b as configManager};
package/dist/index.cjs ADDED
@@ -0,0 +1,12 @@
1
+ "use strict";var Se=Object.create;var G=Object.defineProperty;var be=Object.getOwnPropertyDescriptor;var Pe=Object.getOwnPropertyNames;var we=Object.getPrototypeOf,Ce=Object.prototype.hasOwnProperty;var Re=(g,e)=>()=>(g&&(e=g(g=0)),e);var ge=(g,e)=>{for(var t in e)G(g,t,{get:e[t],enumerable:!0})},le=(g,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Pe(e))!Ce.call(g,n)&&n!==t&&G(g,n,{get:()=>e[n],enumerable:!(r=be(e,n))||r.enumerable});return g};var ee=(g,e,t)=>(t=g!=null?Se(we(g)):{},le(e||!g||!g.__esModule?G(t,"default",{value:g,enumerable:!0}):t,g)),Ee=g=>le(G({},"__esModule",{value:!0}),g);var de={};ge(de,{ConfigManager:()=>j,configManager:()=>h});var j,h,F=Re(()=>{"use strict";j=class{config=new Map;set(e,t){this.config.set(e,t)}get(e){return this.config.get(e)}merge(e){Object.keys(e).forEach(t=>{let r=this.config.get(t),n=e[t];r&&typeof r=="object"&&n&&typeof n=="object"?this.config.set(t,{...r,...n}):this.config.set(t,n)})}getAll(){return Object.fromEntries(this.config)}},h=new j});var Ze={};ge(Ze,{ApiEngine:()=>Z,ApiProvider:()=>Me,AvatarSkeleton:()=>Ue,AxiosAdapter:()=>V,BasePlugin:()=>te,BlockSkeleton:()=>Be,ConfigManager:()=>j,DefaultEventBus:()=>D,LocalStorageAdapter:()=>B,LogLevel:()=>re,Logger:()=>N,PLUGIN_TYPES:()=>$e,PluginErrorBoundary:()=>U,PluginManager:()=>J,PluginProvider:()=>qe,PluginRuntime:()=>A,PluginSandbox:()=>K,PluginSlot:()=>Ne,ProxySandbox:()=>q,SUCCESS_CODE:()=>oe,ScopedStorageAdapter:()=>C,ServiceRegistry:()=>Y,SidebarIconSkeleton:()=>je,Slot:()=>Te,StatusBarItemSkeleton:()=>Fe,StorageManager:()=>W,apiEngine:()=>We,cleanUrlParams:()=>Ve,configManager:()=>h,createLogger:()=>f,dateUtils:()=>Ye,definePlugin:()=>ke,isMockMode:()=>_e,logger:()=>Ae,normalizeParams:()=>ae,pluginManager:()=>m,resolveApiModules:()=>Ge,resolvePluginRegistry:()=>se,serviceRegistry:()=>T,useApi:()=>Le,usePluginLoader:()=>Qe,usePluginManager:()=>Ke,useStorageState:()=>Je,version:()=>ze});module.exports=Ee(Ze);var $e=["business","functional","view","theme","renderer","system"],Te={Sidebar:"sidebar",SidebarPanel:"sidebar-panel",Header:"header",StatusBar:"status-bar",Settings:"settings",MessageRenderer:"message-renderer",MessageContentRenderer:"message-content-renderer",SidebarSystem:"sidebar-system",SidebarBottom:"sidebar-bottom",RootLayout:"root-layout",Custom:"custom"},te=class{get id(){return this.metadata.id}};function ke(g){return{...g,get id(){return this.metadata.id}}}var re=(i=>(i[i.DEBUG=0]="DEBUG",i[i.INFO=1]="INFO",i[i.WARN=2]="WARN",i[i.ERROR=3]="ERROR",i[i.NONE=4]="NONE",i))(re||{}),N=class g{static level=1;prefix;constructor(e="App"){this.prefix=e}static setLevel(e){this.level=e,console.info(`[Logger] Global log level set to: ${re[e]}`)}static getLevel(){return this.level}get debug(){return g.level<=0?console.debug.bind(console,`[${this.prefix}]`):O}get info(){return g.level<=1?console.info.bind(console,`[${this.prefix}]`):O}get warn(){return g.level<=2?console.warn.bind(console,`[${this.prefix}]`):O}get error(){return g.level<=3?console.error.bind(console,`[${this.prefix}]`):O}group(e,t=!1){g.level<=1&&(t?console.groupCollapsed(`[${this.prefix}] ${e}`):console.group(`[${this.prefix}] ${e}`))}get groupEnd(){return g.level<=1?console.groupEnd.bind(console):O}},O=()=>{},Ae=new N,f=g=>new N(g);var ne=f("ServiceRegistry"),Y=class{services=new Map;listeners=new Map;register(e,t){this.services.has(e)&&ne.warn(`\u670D\u52A1 "${e}" \u5DF2\u5B58\u5728\uFF0C\u5C06\u88AB\u8986\u76D6`),this.services.set(e,t),ne.info(`\u670D\u52A1\u5DF2\u6CE8\u518C: ${e}`),this.listeners.has(e)&&(this.listeners.get(e).forEach(n=>n(t)),this.listeners.delete(e))}get(e){return this.services.get(e)}async waitFor(e){let t=this.services.get(e);return t||new Promise(r=>{this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(r)})}unregister(e){this.services.delete(e),ne.info(`\u670D\u52A1\u5DF2\u6CE8\u9500: ${e}`)}clear(){this.services.clear(),this.listeners.clear()}},T=new Y;var z=require("react"),ue=require("react/jsx-runtime"),ce=(0,z.createContext)(null),Me=({api:g,children:e})=>(0,ue.jsx)(ce.Provider,{value:g,children:e}),Le=()=>{let g=(0,z.useContext)(ce);if(!g)throw new Error("useApi must be used within an ApiProvider");return g};F();var fe=require("react");var k=require("react/jsx-runtime"),Ie=f("PluginErrorBoundary"),U=class extends fe.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){Ie.error(`\u63D2\u4EF6 ${this.props.pluginId||"\u672A\u77E5"} \u53D1\u751F\u9519\u8BEF:`,e,t)}handleRetry=()=>{this.setState({hasError:!1,error:null})};render(){return this.state.hasError?this.props.fallback?this.props.fallback:(0,k.jsxs)("div",{className:"p-4 border border-dashed border-red-500/50 rounded-lg bg-red-50 dark:bg-red-500/5 text-center",children:[(0,k.jsx)("div",{className:"text-red-500 font-medium mb-1",children:"\u63D2\u4EF6\u6E32\u67D3\u5931\u8D25"}),(0,k.jsxs)("div",{className:"text-xs text-slate-500 dark:text-slate-400 mb-3",children:["\u63D2\u4EF6 ",this.props.pluginId?`"${this.props.pluginId}"`:"\u672A\u77E5"," \u53D1\u751F\u5F02\u5E38: ",this.state.error?.message]}),(0,k.jsx)("button",{onClick:this.handleRetry,className:"px-3 py-1.5 bg-red-500 hover:bg-red-600 text-white text-xs rounded transition-colors duration-150",children:"\u91CD\u8BD5"})]}):this.props.children}};var R=require("react");var B=class{prefix;constructor(e=""){this.prefix=e}getKey(e){return this.prefix?`${this.prefix}:${e}`:e}getOriginalKey(e){return this.prefix?e.startsWith(this.prefix+":")?e.slice(this.prefix.length+1):null:e}getItem(e){return localStorage.getItem(this.getKey(e))}setItem(e,t){localStorage.setItem(this.getKey(e),t)}removeItem(e){localStorage.removeItem(this.getKey(e))}clear(){if(!this.prefix){localStorage.clear();return}let e=[];for(let t=0;t<localStorage.length;t++){let r=localStorage.key(t);r&&r.startsWith(this.prefix+":")&&e.push(r)}e.forEach(t=>localStorage.removeItem(t))}get length(){if(!this.prefix)return localStorage.length;let e=0;for(let t=0;t<localStorage.length;t++){let r=localStorage.key(t);r&&r.startsWith(this.prefix+":")&&e++}return e}key(e){if(!this.prefix)return localStorage.key(e);let t=0;for(let r=0;r<localStorage.length;r++){let n=localStorage.key(r);if(n&&n.startsWith(this.prefix+":")){if(t===e)return this.getOriginalKey(n);t++}}return null}};F();var Oe=f("EventBus"),D=class{listeners=new Map;on(e,t){return this.listeners.has(e)||this.listeners.set(e,[]),this.listeners.get(e)?.push(t),()=>this.off(e,t)}off(e,t){let r=this.listeners.get(e);r&&this.listeners.set(e,r.filter(n=>n!==t))}emit(e,...t){let r=this.listeners.get(e);r&&r.forEach(n=>{try{n(...t)}catch(i){Oe.error(`\u4E8B\u4EF6\u76D1\u542C\u5668\u5904\u7406\u9519\u8BEF (${e}):`,i)}})}once(e,t){let r=(...n)=>{t(...n),this.off(e,r)};this.on(e,r)}};var pe=f("ProxySandbox"),q=class{name;proxy;running=!1;updatedValueSet=new Set;effectPool={timeouts:new Set,intervals:new Set,listeners:new Map};globalContext;static globalWhitelist=["System","console","requestAnimationFrame","cancelAnimationFrame","location","history","navigator","document"];constructor(e,t=window){this.name=e,this.globalContext=t;let{fakeWindow:r,propertiesWithGetter:n}=this.createFakeWindow(t);this.patchGlobalEffects(r);let i=new Proxy(r,{set:(a,s,o)=>this.running?(this.updatedValueSet.add(s),a[s]=o,!0):(pe.warn(`${e} \u672A\u8FD0\u884C\uFF0C\u65E0\u6CD5\u8BBE\u7F6E\u5C5E\u6027 '${String(s)}'`),!1),get:(a,s)=>{if(s===Symbol.unscopables)return;if(s==="window"||s==="self"||s==="globalThis")return this.proxy;if(s==="top"||s==="parent")return this.globalContext[s];let o=a[s];if(o!==void 0||this.updatedValueSet.has(s))return o;let l=this.globalContext[s];return typeof l=="function"&&!this.isConstructor(l)&&this.isNativeFunction(l)?l.bind(this.globalContext):l},has:(a,s)=>s in a||s in this.globalContext,defineProperty:(a,s,o)=>this.running?(this.updatedValueSet.add(s),Reflect.defineProperty(a,s,o)):!1});this.proxy=i}active(){this.running||(this.running=!0)}inactive(){this.running=!1,this.effectPool.timeouts.forEach(e=>this.globalContext.clearTimeout(e)),this.effectPool.timeouts.clear(),this.effectPool.intervals.forEach(e=>this.globalContext.clearInterval(e)),this.effectPool.intervals.clear(),this.effectPool.listeners.forEach((e,t)=>{e.forEach(({listener:r,options:n})=>{this.globalContext.removeEventListener(t,r,n)})}),this.effectPool.listeners.clear(),pe.debug(`${this.name} \u5DF2\u505C\u7528\uFF0C\u526F\u4F5C\u7528\u5DF2\u6E05\u9664\u3002`)}eval(e){let t=`
2
+ ;(function(window, self, globalThis){
3
+ with(window) {
4
+ ${e}
5
+ }
6
+ }).bind(window.proxy)(window.proxy, window.proxy, window.proxy);
7
+ `;return(0,eval)(t)}createFakeWindow(e){let t=new Map,r={};return Object.getOwnPropertyNames(e).forEach(n=>{let i=Object.getOwnPropertyDescriptor(e,n);i&&i.configurable}),{fakeWindow:r,propertiesWithGetter:t}}isConstructor(e){let t=e.prototype;return!!(t&&t.constructor===e&&Object.getOwnPropertyNames(t).length>0)}isNativeFunction(e){return e.toString().indexOf("[native code]")>-1}patchGlobalEffects(e){e.setTimeout=(t,r,...n)=>{let i=this.globalContext.setTimeout(t,r,...n);return this.effectPool.timeouts.add(i),i},e.clearTimeout=t=>{t&&(this.effectPool.timeouts.delete(t),this.globalContext.clearTimeout(t))},e.setInterval=(t,r,...n)=>{let i=this.globalContext.setInterval(t,r,...n);return this.effectPool.intervals.add(i),i},e.clearInterval=t=>{t&&(this.effectPool.intervals.delete(t),this.globalContext.clearInterval(t))},e.addEventListener=(t,r,n)=>{let i=this.effectPool.listeners.get(t)||[];return i.push({listener:r,options:n}),this.effectPool.listeners.set(t,i),this.globalContext.addEventListener(t,r,n)},e.removeEventListener=(t,r,n)=>{let i=this.effectPool.listeners.get(t);if(i){let a=i.findIndex(s=>s.listener===r&&s.options===n);a!==-1&&i.splice(a,1)}return this.globalContext.removeEventListener(t,r,n)}}};var K=class{pluginId;storageManager;constructor(e,t){this.pluginId=e,this.storageManager=t}get storage(){return this.storageManager.getContextStorage(this.pluginId)}get logger(){return f(`Plugin:${this.pluginId}`)}};var y=f("PluginRuntime"),A=class{plugin;context;storageSandbox;windowSandbox;isLoaded=!1;isMounted=!1;constructor(e,t,r){this.plugin=e,this.storageSandbox=new K(e.id,r),this.windowSandbox=new q(e.id),this.context={pluginId:e.id,api:t.api,events:t.events,storage:this.storageSandbox.storage,logger:this.storageSandbox.logger,window:this.windowSandbox.proxy,getService:n=>T.get(n),registerService:(n,i)=>T.register(`${e.id}.${n}`,i)}}async load(){if(!this.isLoaded){y.debug(`\u6B63\u5728\u52A0\u8F7D\u63D2\u4EF6: ${this.plugin.id}`);try{this.plugin.metadata.api&&this.context.api&&typeof this.context.api.register=="function"&&(this.context.api.register(this.plugin.metadata.api),y.debug(`\u5DF2\u4E3A\u63D2\u4EF6 ${this.plugin.id} \u81EA\u52A8\u6CE8\u518C API \u914D\u7F6E`)),this.plugin.onLoad&&await this.plugin.onLoad(this.context),this.isLoaded=!0,y.info(`\u63D2\u4EF6 ${this.plugin.id} \u5DF2\u52A0\u8F7D\u3002`)}catch(e){throw y.error(`\u63D2\u4EF6 ${this.plugin.id} \u52A0\u8F7D\u5931\u8D25:`,e),e}}}async mount(){if(this.isLoaded||await this.load(),!this.isMounted){y.debug(`\u6B63\u5728\u6302\u8F7D\u63D2\u4EF6: ${this.plugin.id}`);try{this.windowSandbox.active(),this.plugin.onMount&&this.plugin.onMount(this.context),this.isMounted=!0,y.info(`\u63D2\u4EF6 ${this.plugin.id} \u5DF2\u6302\u8F7D\u3002`)}catch(e){throw y.error(`\u63D2\u4EF6 ${this.plugin.id} \u6302\u8F7D\u5931\u8D25:`,e),e}}}async unmount(){if(this.isMounted){y.debug(`\u6B63\u5728\u5378\u8F7D\u63D2\u4EF6: ${this.plugin.id}`);try{this.plugin.onUnmount&&this.plugin.onUnmount(this.context)}catch(e){y.error(`\u63D2\u4EF6 ${this.plugin.id} \u5378\u8F7D\u65F6\u51FA\u9519:`,e)}finally{this.windowSandbox.inactive(),this.isMounted=!1,y.info(`\u63D2\u4EF6 ${this.plugin.id} \u5DF2\u5378\u8F7D\u3002`)}}}async destroy(){await this.unmount(),this.isLoaded=!1}get status(){return this.isMounted?"mounted":this.isLoaded?"loaded":"initial"}};var C=class{constructor(e,t){this.underlyingStorage=e;this.prefix=t}getKey(e){return this.prefix?`${this.prefix}:${e}`:e}getOriginalKey(e){return this.prefix?e.startsWith(this.prefix+":")?e.slice(this.prefix.length+1):null:e}getItem(e){return this.underlyingStorage.getItem(this.getKey(e))}setItem(e,t){this.underlyingStorage.setItem(this.getKey(e),t)}removeItem(e){this.underlyingStorage.removeItem(this.getKey(e))}clear(){if(!this.prefix){this.underlyingStorage.clear();return}let e=[];for(let t=0;t<this.underlyingStorage.length;t++){let r=this.underlyingStorage.key(t);r&&r.startsWith(this.prefix+":")&&e.push(r)}e.forEach(t=>this.underlyingStorage.removeItem(t))}get length(){let e=0;for(let t=0;t<this.underlyingStorage.length;t++){let r=this.underlyingStorage.key(t);r&&r.startsWith(this.prefix+":")&&e++}return e}key(e){let t=0;for(let r=0;r<this.underlyingStorage.length;r++){let n=this.underlyingStorage.key(r);if(n&&n.startsWith(this.prefix+":")){if(t===e)return this.getOriginalKey(n);t++}}return null}};F();var W=class{baseStorage;schemas=new Map;constructor(e){this.baseStorage=e}registerSchema(e,t){this.schemas.set(e,t)}validateKey(e,t,r="plugin"){let n=this.schemas.get(e);if(!n)return;let i=n.find(s=>s.key===t);if(!i){console.warn(`[Storage] Key "${t}" not defined in plugin "${e}" schema.`);return}let a=i.scope||"plugin";a!==r&&console.warn(`[Storage] Key "${t}" defined in scope "${a}" but accessed via "${r}".`)}getPluginStorage(e){return new C(this.baseStorage,`plugin:${e}`)}getSharedStorage(){return new C(this.baseStorage,"shared")}getSystemStorage(){return new C(this.baseStorage,"system")}getContextStorage(e){let t=this.getPluginStorage(e),r=this.getSharedStorage(),n=(i,a)=>({get:s=>{this.validateKey(e,s,a);try{let o=i.getItem(s);if(o!==null)try{return JSON.parse(o)}catch{return o}if(a==="plugin"){let c=h.get(e);if(c&&c[s]!==void 0)return c[s]}let l=this.schemas.get(e)?.find(c=>c.key===s);return l&&l.default!==void 0?l.default:null}catch(o){return console.warn(`[Storage] Failed to read key "${s}"`,o),null}},set:(s,o)=>{this.validateKey(e,s,a);try{i.setItem(s,JSON.stringify(o))}catch(l){console.warn(`[Storage] Failed to stringify key "${s}"`,l)}},remove:s=>{this.validateKey(e,s,a),i.removeItem(s)}});return{...n(t,"plugin"),shared:n(r,"shared")}}};var d=f("PluginManager"),J=class{eventBus=new D;storageManager;runtimes=new Map;plugins=new Map;routes=[];extensions=new Map;pluginStates={};listeners=new Set;sharedContext=null;utils={};constructor(e){this.storageManager=new W(e),this.loadStates(),this.subscribe(()=>{this.saveStates()})}loadStates(){try{let t=this.storageManager.getSystemStorage().getItem("plugin_states");t&&(this.pluginStates=JSON.parse(t),d.debug("\u4ECE\u7CFB\u7EDF\u5B58\u50A8\u4E2D\u52A0\u8F7D\u72B6\u6001:",this.pluginStates))}catch(e){d.error("\u52A0\u8F7D\u63D2\u4EF6\u72B6\u6001\u5931\u8D25:",e)}}saveStates(){try{this.storageManager.getSystemStorage().setItem("plugin_states",JSON.stringify(this.pluginStates)),d.debug("\u5DF2\u4FDD\u5B58\u63D2\u4EF6\u72B6\u6001\u5230\u5B58\u50A8")}catch(e){d.error("\u4FDD\u5B58\u63D2\u4EF6\u72B6\u6001\u5931\u8D25:",e)}}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}getStorageManager(){return this.storageManager}notify(){this.listeners.forEach(e=>e())}getPlugins(){let e={system:0,theme:1,renderer:2,functional:3,business:4,view:5};return Array.from(this.plugins.values()).sort((t,r)=>{let n=e[t.metadata.type]??99,i=e[r.metadata.type]??99;if(n!==i)return n-i;let a=this.pluginStates[t.id]||{order:0},s=this.pluginStates[r.id]||{order:0};return a.order-s.order})}getPluginState(e){return this.pluginStates[e]||{enabled:!0,order:0}}isPluginEnabled(e){let t=this.pluginStates[e];return t?t.enabled:!0}togglePlugin(e,t){let r=this.pluginStates[e]||{enabled:!0,order:0};if(this.pluginStates[e]={...r,enabled:t},t){if(this.sharedContext){let n=this.plugins.get(e);if(n)try{let i=new A(n,this.sharedContext,this.storageManager);this.runtimes.set(e,i),i.mount()}catch(i){d.error(`\u542F\u7528\u63D2\u4EF6 ${e} \u5931\u8D25:`,i)}}}else{let n=this.runtimes.get(e);n&&(n.unmount(),this.runtimes.delete(e))}this.notify()}setPluginOrder(e,t){let r=this.pluginStates[e]||{enabled:!0,order:0};this.pluginStates[e]={...r,order:t},this.notify()}getUnifiedCapabilities(e){return this.plugins.get(e)?.metadata.capabilities||{}}updatePluginConfig(e,t,r){let n=h.get(e)||{};n[t]=r,h.set(e,n);try{this.storageManager.getContextStorage(e).set(t,r)}catch(i){d.warn("\u4FDD\u5B58\u914D\u7F6E\u5230\u5B58\u50A8\u5931\u8D25",i)}this.eventBus.emit("config:changed",{pluginId:e,key:t,value:r})}getPluginConfig(e,t){let r=h.get(e);return r?r[t]:void 0}getSystemConfig(e){let t=h.get("system");return t?t[e]:void 0}getService(e){return T.get(e)}getExtensions(e){let t=e,r=this.extensions.get(t)||[];return r=r.filter(n=>{let i=n._pluginId;return!i||this.isPluginEnabled(i)}),r.sort((n,i)=>(n.order||0)-(i.order||0))}getRoutes(){let e=[];return this.getPlugins().forEach(t=>{if(this.isPluginEnabled(t.id)&&t.metadata.routes){let r=h.get(t.id)||{};t.metadata.routes.forEach(n=>{e.push({...n,meta:{...n.meta,pluginId:t.id,config:r}})})}}),e}register(e,t=!0){if(!this.validatePlugin(e)){d.error(`\u63D2\u4EF6\u6CE8\u518C\u5931\u8D25: ${e?.id||"\u672A\u77E5"}`);return}if(this.plugins.has(e.id))return;let r=[...e.metadata.storage||[],...e.metadata.configuration?.map(o=>({key:o.key,type:o.type==="select"?"string":o.type,label:o.label,description:o.description,default:o.default,scope:"plugin"}))||[]];r.length>0&&this.storageManager.registerSchema(e.id,r),this.pluginStates[e.id]||(this.pluginStates[e.id]={enabled:!0,order:0});let n={},i={},a=this.storageManager.getPluginStorage(e.id);e.metadata.configuration&&e.metadata.configuration.forEach(o=>{o.default!==void 0&&(n[o.key]=o.default);try{let l=a.getItem(o.key);l!==null&&(i[o.key]=JSON.parse(l))}catch{}});let s={...n,...e.defaultConfig,...h.get(e.id)||{},...i};switch(h.set(e.id,s),e.metadata.type){case"business":this.handleBusinessPlugin(e);break;case"functional":this.handleFunctionalPlugin(e);break;case"view":this.handleViewPlugin(e);break;case"theme":this.handleThemePlugin(e);break;case"system":this.handleSystemPlugin(e);break;case"renderer":break;default:d.warn(`\u63D2\u4EF6 ${e.id} \u7C7B\u578B\u672A\u77E5: ${e.metadata.type}`);break}e.metadata.routes&&e.metadata.routes.length>0&&d.info(`\u5DF2\u4ECE\u63D2\u4EF6 ${e.id} \u6536\u96C6\u8DEF\u7531:`,e.metadata.routes),e.metadata.extensions&&e.metadata.extensions.length>0&&(e.metadata.extensions.forEach(o=>{let l=this.extensions.get(o.slot)||[];l.push({...o,_pluginId:e.id}),this.extensions.set(o.slot,l)}),d.info(`\u5DF2\u4ECE\u63D2\u4EF6 ${e.id} \u6536\u96C6\u6269\u5C55\u70B9`)),this.plugins.set(e.id,e),d.info(`\u63D2\u4EF6 ${e.id} \u5DF2\u6CE8\u518C\u4E3A ${e.metadata.type}\u3002`),t&&this.notify()}async initPlugins(e={}){this.sharedContext={...e,events:this.eventBus},this.plugins.forEach(r=>{if(this.isPluginEnabled(r.id)&&!this.runtimes.has(r.id)){let n=new A(r,this.sharedContext,this.storageManager);this.runtimes.set(r.id,n)}});let t=this.getSortedPluginIds();for(let r of t){let n=this.runtimes.get(r);if(n)try{console.log(`[PluginManager] invoking onLoad for ${r}`),await n.load(),console.log(`[PluginManager] onLoad completed for ${r}`)}catch(i){d.error(`\u63D2\u4EF6 ${r} \u52A0\u8F7D\u5931\u8D25:`,i)}}for(let r of t){let n=this.runtimes.get(r);if(n)try{await n.mount()}catch(i){d.error(`\u63D2\u4EF6 ${r} \u6302\u8F7D\u5931\u8D25:`,i)}}}getSortedPluginIds(){let e=Array.from(this.runtimes.keys()),t=new Set,r=[],n=new Set,i=o=>{if(t.has(o))return;if(n.has(o)){d.error(`\u5FAA\u73AF\u4F9D\u8D56\u68C0\u6D4B\u5230: ${o}`);return}n.add(o);let l=this.plugins.get(o);l?.metadata.dependencies&&l.metadata.dependencies.forEach(c=>{this.runtimes.has(c)&&i(c)}),n.delete(o),t.add(o),r.push(o)},a={system:100,functional:50,business:10};return[...e].sort((o,l)=>{let c=a[this.plugins.get(o)?.metadata.type||""]||0;return(a[this.plugins.get(l)?.metadata.type||""]||0)-c}).forEach(o=>i(o)),r}async loadPlugins(e,t){d.info("\u5F00\u59CB\u52A0\u8F7D\u63D2\u4EF6...");let r=Object.entries(t).map(async([a,s])=>{try{let o=await s(),l=e[a],c=this.instantiatePlugin(a,o,l);return c&&l&&h.set(c.id,l),c}catch(o){return d.error(`\u52A0\u8F7D\u672C\u5730\u63D2\u4EF6\u6A21\u5757 ${a} \u5931\u8D25:`,o),null}}),n=Object.entries(e).filter(([a,s])=>s.url&&!t[a]).map(async([a,s])=>{try{let o=await this.loadRemotePlugin(a,s.url,s);return o&&s&&h.set(o.id,s),o}catch(o){return d.error(`\u52A0\u8F7D\u5728\u7EBF\u63D2\u4EF6 ${a} \u5931\u8D25:`,o),null}});(await Promise.all([...r,...n])).forEach(a=>{a&&this.register(a,!1)}),this.notify(),d.info(`\u63D2\u4EF6\u52A0\u8F7D\u5B8C\u6210\uFF0C\u5171\u52A0\u8F7D ${this.plugins.size} \u4E2A\u63D2\u4EF6`)}async loadRemotePlugin(e,t,r){if(d.info(`\u6B63\u5728\u4ECE ${t} \u52A0\u8F7D\u8FDC\u7A0B\u63D2\u4EF6 ${e}...`),r?.format==="iife")return this.loadIIFEPlugin(e,t,r);try{let i=await new Function("specifier","return import(specifier)")(t);return this.instantiatePlugin(e,i,r)}catch{return d.warn(`ESM \u52A0\u8F7D\u5931\u8D25\uFF0C\u5C1D\u8BD5 IIFE \u52A0\u8F7D: ${e}`),this.loadIIFEPlugin(e,t,r)}}loadIIFEPlugin(e,t,r){return new Promise((n,i)=>{let a=document.createElement("script");a.src=t,a.onload=()=>{let s=e.replace(/[^a-zA-Z0-9]/g,"_"),o=window[s];o?n(this.instantiatePlugin(e,o,r)):i(new Error(`\u8FDC\u7A0B\u63D2\u4EF6 ${e} \u52A0\u8F7D\u540E\u672A\u627E\u5230\u5168\u5C40\u53D8\u91CF ${s}`))},a.onerror=()=>i(new Error(`\u8FDC\u7A0B\u63D2\u4EF6 ${e} \u52A0\u8F7D\u5931\u8D25: ${t}`)),document.head.appendChild(a)})}instantiatePlugin(e,t,r){let n=t.default;if(!n){let i=Object.keys(t).find(a=>a.endsWith("Plugin"));i&&(n=t[i])}if(!n&&typeof t=="object"&&t.id&&t.metadata&&(n=t),n){typeof n=="function"&&n.prototype&&d.warn(`\u63D2\u4EF6 ${e} \u4F7F\u7528\u4E86\u7C7B\u5B9A\u4E49\u6A21\u5F0F\u3002\u5EFA\u8BAE\u7EDF\u4E00\u4F7F\u7528 definePlugin() \u5DE5\u5382\u6A21\u5F0F\u4EE5\u6D88\u9664\u6B67\u4E49\u5E76\u7B80\u5316\u4EE3\u7801\u3002`);let a=typeof n=="function"?new n:n;if(!(e.includes("/")&&(e.includes(".ts")||e.includes(".tsx")))&&e&&a.metadata&&a.metadata.id!==e&&(a.metadata.id=e),!a.id&&a.metadata?.id)try{a.id=a.metadata.id}catch{}return r&&(a.defaultConfig={...a.defaultConfig,...r}),a}return d.warn(`\u6A21\u5757 ${e} \u672A\u5BFC\u51FA\u6709\u6548\u7684\u63D2\u4EF6\u5165\u53E3`),null}validatePlugin(e){return!(!e.id||!e.metadata)}handleBusinessPlugin(e){}handleFunctionalPlugin(e){}handleViewPlugin(e){}handleThemePlugin(e){}handleSystemPlugin(e){}},m=new J(new B);var v=require("react/jsx-runtime"),Ne=({slot:g,props:e={},className:t,style:r,renderItem:n,skeleton:i,fallback:a})=>{let[,s]=(0,R.useState)({});(0,R.useEffect)(()=>m.subscribe(()=>{s({})}),[]);let o=m.getExtensions(g),l=m.getSystemConfig("title")?{title:m.getSystemConfig("title"),logo:m.getSystemConfig("logo"),version:m.getSystemConfig("version")}:void 0,c=(0,R.useMemo)(()=>({...e,systemConfig:l}),[e,l]),u=(0,R.useMemo)(()=>o.map((p,x)=>{let _=p.component,P=p.meta?.key||`${p.slot}-${p.order||0}-${x}`;return{key:P,extension:p,component:(0,v.jsx)(U,{pluginId:`extension-${P}`,children:(0,v.jsx)(_,{...c})},P)}}),[o,c]);return u.length===0?a?(0,v.jsx)(v.Fragment,{children:a}):i?(0,v.jsx)("div",{className:`plugin-slot plugin-slot-${g} plugin-slot-skeleton ${t||""}`,style:r,children:i}):null:u.length===1&&g==="root-layout"&&!t&&!r&&!n?(0,v.jsx)(v.Fragment,{children:u[0].component}):(0,v.jsx)("div",{className:`plugin-slot plugin-slot-${g} ${t||""}`,style:r,children:n?u.map((p,x)=>n(p,x)):u.map(p=>p.component)})};var b=require("react/jsx-runtime"),je=({expanded:g=!1})=>(0,b.jsxs)("div",{className:`flex items-center transition-all duration-300 relative
8
+ ${g?"w-full":"w-12 justify-center"} px-3 h-11 rounded-xl`,children:[(0,b.jsx)("div",{className:"w-6 h-6 bg-slate-200 dark:bg-white/10 rounded-lg shrink-0 animate-pulse"}),g&&(0,b.jsx)("div",{className:"ml-3 flex-1 h-4 bg-slate-200 dark:bg-white/10 rounded animate-pulse"})]}),Fe=()=>(0,b.jsx)("div",{className:"h-4 w-16 bg-slate-200 dark:bg-white/10 rounded animate-pulse"}),Ue=()=>(0,b.jsx)("div",{className:"w-10 h-10 rounded-full bg-slate-200 dark:bg-white/10 animate-pulse"}),Be=({className:g})=>(0,b.jsx)("div",{className:`bg-slate-200 dark:bg-white/10 rounded animate-pulse ${g||"w-full h-full"}`});var ie=f("AutoLoader"),De=[{pathSegment:"@chatbi-plugins",idPrefix:"@chatbi-v/plugin"},{pathSegment:"@chatbi-apps",idPrefix:"@chatbi-v/app"},{pathSegment:"packages/plugins",idPrefix:"@chatbi-v/plugin"},{pathSegment:"packages/apps",idPrefix:"@chatbi-v/app"}],se=g=>{let{modules:e,rules:t=De}=g,r={},n=t.map(i=>{let a=i.pathSegment.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return{...i,regex:new RegExp(`${a}/([^/]+)/src/index`)}});for(let i in e)try{let a=null;for(let s of n){let o=i.match(s.regex);if(o&&o[1]){a=`${s.idPrefix}-${o[1]}`,ie.info(`\u89E3\u6790\u8DEF\u5F84\u6210\u529F: ${i} -> ${a}`);break}}a?r[a]=e[i]:ie.warn(`\u65E0\u6CD5\u4ECE\u8DEF\u5F84\u89E3\u6790\u63D2\u4EF6 ID: ${i}\uFF0C\u8BF7\u68C0\u67E5\u662F\u5426\u7B26\u5408\u547D\u540D\u7EA6\u5B9A\u3002`)}catch(a){ie.error(`\u89E3\u6790\u63D2\u4EF6\u8DEF\u5F84\u5931\u8D25: ${i}`,a)}return r};var oe="000000";var Q=require("react"),me=require("react/jsx-runtime"),he=(0,Q.createContext)(null),qe=({manager:g,children:e})=>(0,me.jsx)(he.Provider,{value:g,children:e}),Ke=()=>{let g=(0,Q.useContext)(he);if(!g)throw new Error("usePluginManager must be used within a PluginProvider");return g};var ye=ee(require("axios")),V=class{client;constructor(e="/api",t=1e4){this.client=ye.default.create({baseURL:e,timeout:t}),this.client.interceptors.response.use(r=>r,r=>Promise.reject(r))}async request(e){return this.client.request(e)}async stream(e,t,r){let{onMessage:n,onError:i,onFinish:a}=t;try{let s=this.client.defaults.baseURL||"",o=e.url;if(o&&!o.startsWith("http")&&s){let $=s.endsWith("/")?s.slice(0,-1):s,L=o.startsWith("/")?o:`/${o}`;o=`${$}${L}`}if(e.params){let $=new URLSearchParams;Object.entries(e.params).forEach(([L,I])=>{I!==void 0&&$.append(L,String(I))}),o+=(o.includes("?")?"&":"?")+$.toString()}let l={...this.client.defaults.headers.common||{},"Content-Type":"application/json",...e.headers||{}},c=this.client.defaults.headers;c.Authorization&&(l.Authorization=c.Authorization),c["x-token"]&&(l["x-token"]=c["x-token"]);let{signal:u,...p}=e,x=await fetch(o,{method:e.method,headers:l,body:e.data?JSON.stringify(e.data):void 0,signal:u});if(!x.ok)throw new Error(`HTTP error! status: ${x.status}`);if(!x.body)throw new Error("\u54CD\u5E94\u4F53\u4E3A\u7A7A");let _=x.body.getReader(),P=new TextDecoder,w="";for(;;){let{done:$,value:L}=await _.read();if($)break;w+=P.decode(L,{stream:!0});let I=w.split(`
9
+
10
+ `);w=I.pop()||"";for(let xe of I)n&&n(xe+`
11
+
12
+ `)}w&&n&&n(w),a&&a()}catch(s){i&&i(s)}}};var M=f("ApiEngine"),Z=class{adapter;config={};interceptors=[];constructor(e){this.adapter=e||new V}registerInterceptor(e){this.interceptors.push(e)}unregisterInterceptor(e){this.interceptors=this.interceptors.filter(t=>t!==e)}useAdapter(e){this.adapter=e}register(e){M.info("\u6B63\u5728\u6CE8\u518C API \u914D\u7F6E:",Object.keys(e)),this.config={...this.config,...e}}getEndpoint(e,t){return this.config[e]?.[t]}async call(e,t,r,n={}){let i=this.getEndpoint(e,t);if(!i)return M.warn(`\u672A\u627E\u5230 API \u5B9A\u4E49: ${e}.${t} (\u5F53\u524D\u5DF2\u6CE8\u518C\u6A21\u5757: ${Object.keys(this.config).join(", ")})`),Promise.resolve(void 0);let a=await this.prepareRequestConfig(i,r,n),s;try{s=await this.adapter.request(a,i)}catch(l){if(l.response)s=l.response;else throw l}if(this.interceptors.length>0){let l=this.createInterceptorContext(s,a);for(let c of this.interceptors)if(c.interceptResponse&&await c.interceptResponse(l)){M.info("\u8BF7\u6C42\u88AB\u62E6\u622A\u5668\u52AB\u6301:",e,t);return}}if(s&&s.status&&(s.status<200||s.status>=300)){let l=this.isAxiosResponse(s)?s.data:s;if(!this.isBaseResponse(l))throw new Error(`Request failed with status ${s.status}`)}let o=this.isAxiosResponse(s)?s.data:s;if(this.isBaseResponse(o)){let l=o,c=String(l.code);if(!(c===oe||c==="200"||c==="0")&&(i.errorStrategy||"reject")==="reject")throw M.error(`API \u8BF7\u6C42\u4E1A\u52A1\u9519\u8BEF (${e}.${t}):`,l.message),new Error(l.message||`Request failed with code ${c}`)}return o}async stream(e,t,r,n={}){let i=this.getEndpoint(e,t);if(!i){M.warn(`\u672A\u627E\u5230 API \u5B9A\u4E49: ${e}.${t}\uFF0C\u8DF3\u8FC7\u6D41\u5F0F\u8BF7\u6C42\u3002`);return}if(!this.adapter.stream){M.warn("\u5F53\u524D API \u9002\u914D\u5668\u4E0D\u652F\u6301\u6D41\u5F0F\u4F20\u8F93\u3002");return}let a=await this.prepareRequestConfig(i,r,n),s={onMessage:n.onMessage,onError:n.onError,onFinish:n.onFinish};await this.adapter.stream(a,s,i)}async prepareRequestConfig(e,t,r){let n=e.url,i=r.params||{};n=n.replace(/:([a-zA-Z0-9_]+)/g,(o,l)=>i[l]!==void 0?String(i[l]):t&&typeof t=="object"&&t[l]!==void 0?String(t[l]):`:${l}`);let a=e.method,s={...r,url:n,method:a};if(a==="GET"||a==="DELETE"?s.params=t:s.data=t,this.interceptors.length>0)for(let o of this.interceptors)o.interceptRequest&&(s=await o.interceptRequest(s));return s}isBaseResponse(e){return e&&typeof e=="object"&&"code"in e&&("message"in e||"data"in e)}isAxiosResponse(e){return e&&typeof e=="object"&&"data"in e&&"status"in e&&"headers"in e}createInterceptorContext(e,t){return e&&typeof e=="object"&&"status"in e&&"headers"in e?{response:e,status:e.status,headers:e.headers,data:e.data,config:t}:{response:e,status:200,headers:{},data:e,config:t}}},We=new Z;function ae(g="last"){if(typeof window>"u")return new URLSearchParams;let{search:e,hash:t}=window.location,r=new URLSearchParams(e),n=new URLSearchParams(t.split("?")[1]||""),i=[];r.forEach((s,o)=>i.push([o,s,"search"])),n.forEach((s,o)=>i.push([o,s,"hash"]));let a=new Map;return g==="first"?i.forEach(([s,o])=>{a.has(s)||a.set(s,o)}):g==="last"?i.forEach(([s,o])=>a.set(s,o)):g==="search"?(i.forEach(([s,o,l])=>{l==="search"&&a.set(s,o)}),n.forEach((s,o)=>{a.has(o)||a.set(o,s)})):g==="hash"&&(i.forEach(([s,o,l])=>{l==="hash"&&a.set(s,o)}),r.forEach((s,o)=>{a.has(o)||a.set(o,s)})),new URLSearchParams(Array.from(a.entries()))}function Ve(g){if(typeof window>"u")return"";let{pathname:e,search:t,hash:r}=window.location,n=new URLSearchParams(t);g.forEach(p=>n.delete(p));let i=n.toString(),a=r.split("?"),s=a[0],o=a[1]||"",l=new URLSearchParams(o);g.forEach(p=>l.delete(p));let c=l.toString(),u=s+(c?"?"+c:"");return e+(i?"?"+i:"")+u}var He=(g,e)=>{let t=JSON.parse(JSON.stringify(g));return Object.keys(e).forEach(r=>{t[r]&&(t[r]={...t[r],...e[r]})}),t};function _e(){let g=typeof process<"u"&&process.env.VITE_USE_MOCK==="true"||typeof window<"u"&&window.VITE_USE_MOCK==="true";if(typeof window<"u"){let t=ae().get("mock");if(t==="true")return!0;if(t==="false")return!1}return g}function Ge(g,e={}){let t={},r=n=>(n.split("/").pop()||"").replace(/\.mock\.(ts|js|tsx|jsx|json)$/,"").replace(/\.(ts|js|tsx|jsx|json)$/,"");return Object.entries(g).forEach(([n,i])=>{if(n.includes(".mock."))return;let a=r(n);if(!a||!i.default)return;let s=i.default,o=Object.entries(e).find(([l])=>r(l)===a&&l.includes(".mock."));if(o){let l=o[1],c=l.default||l;c&&(s=He(s,c))}t[a]=s}),t}var S=ee(require("dayjs")),ve=ee(require("dayjs/plugin/relativeTime")),gr=require("dayjs/locale/zh-cn");S.default.extend(ve.default);S.default.locale("zh-cn");var Ye={formatDate(g){return(0,S.default)(g).format("YYYY-MM-DD")},formatTime(g){return(0,S.default)(g).format("HH:mm:ss")},formatDateTime(g){return(0,S.default)(g).format("YYYY-MM-DD HH:mm:ss")},now(){return(0,S.default)().valueOf()},fromNow(g){return(0,S.default)(g).fromNow()},dayjs:S.default};var ze="1.0.0";var H=require("react");function Je(g,e,t={}){let{defaultValue:r,scope:n="plugin"}=t,i=m.getStorageManager(),a=(0,H.useCallback)(()=>{let c=i.getContextStorage(g);return n==="shared"?c.shared:c},[g,n,i]),[s,o]=(0,H.useState)(()=>{try{if(typeof window>"u")return r;let u=a().get(e);return u!==null?u:r}catch(c){return console.warn(`[useStorageState] Error reading key "${e}"`,c),r}}),l=(0,H.useCallback)(c=>{try{let u=c instanceof Function?c(s):c;o(u),a().set(e,u)}catch(u){console.warn(`[useStorageState] Error setting key "${e}":`,u)}},[e,s,a]);return[s,l]}var E=require("react");var X=f("PluginLoader"),Qe=g=>{let[e,t]=(0,E.useState)(!1),[r,n]=(0,E.useState)(0),i=(0,E.useRef)(!1);return(0,E.useEffect)(()=>{let a=m.subscribe(()=>{X.debug("Plugin state changed, refreshing UI..."),n(o=>o+1)});return(async()=>{if(!(i.current||e)){i.current=!0;try{let{discoveryRules:o=[],modules:l={},registry:c={},pluginConfigs:u,sharedContext:p={},baseUrl:x=window.location.origin}=g;X.info("Starting to load plugins...");let P={...Object.keys(l).length>0?se({modules:l,rules:o.length>0?o:void 0}):{},...c};if(g.systemConfig){let{configManager:w}=await Promise.resolve().then(()=>(F(),de));w.set("system",g.systemConfig)}await m.loadPlugins(u,P),await m.initPlugins(p),t(!0),X.info("Plugins loaded successfully")}catch(o){X.error("Failed to load plugins:",o)}finally{i.current=!1}}})(),()=>{a()}},[]),{pluginsLoaded:e,pluginVersion:r}};0&&(module.exports={ApiEngine,ApiProvider,AvatarSkeleton,AxiosAdapter,BasePlugin,BlockSkeleton,ConfigManager,DefaultEventBus,LocalStorageAdapter,LogLevel,Logger,PLUGIN_TYPES,PluginErrorBoundary,PluginManager,PluginProvider,PluginRuntime,PluginSandbox,PluginSlot,ProxySandbox,SUCCESS_CODE,ScopedStorageAdapter,ServiceRegistry,SidebarIconSkeleton,Slot,StatusBarItemSkeleton,StorageManager,apiEngine,cleanUrlParams,configManager,createLogger,dateUtils,definePlugin,isMockMode,logger,normalizeParams,pluginManager,resolveApiModules,resolvePluginRegistry,serviceRegistry,useApi,usePluginLoader,usePluginManager,useStorageState,version});