wu-framework 2.1.0 → 2.1.2

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.
Files changed (63) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +570 -570
  3. package/dist/adapters/angular/index.d.ts +154 -154
  4. package/dist/adapters/angular/index.js.map +1 -1
  5. package/dist/adapters/angular.d.ts +3 -3
  6. package/dist/adapters/index.js.map +1 -1
  7. package/dist/adapters/lit/index.d.ts +120 -120
  8. package/dist/adapters/lit/index.js.map +1 -1
  9. package/dist/adapters/lit.d.ts +3 -3
  10. package/dist/adapters/preact/index.d.ts +108 -108
  11. package/dist/adapters/preact/index.js.map +1 -1
  12. package/dist/adapters/preact.d.ts +3 -3
  13. package/dist/adapters/qwik/index.js +1 -1
  14. package/dist/adapters/qwik/index.js.map +1 -1
  15. package/dist/adapters/react/index.d.ts +246 -246
  16. package/dist/adapters/react/index.js.map +1 -1
  17. package/dist/adapters/react.d.ts +3 -3
  18. package/dist/adapters/shared.js.map +1 -1
  19. package/dist/adapters/solid/index.d.ts +101 -101
  20. package/dist/adapters/solid/index.js.map +1 -1
  21. package/dist/adapters/solid.d.ts +3 -3
  22. package/dist/adapters/svelte/index.d.ts +166 -166
  23. package/dist/adapters/svelte/index.js.map +1 -1
  24. package/dist/adapters/svelte.d.ts +3 -3
  25. package/dist/adapters/vanilla/index.d.ts +179 -179
  26. package/dist/adapters/vanilla/index.js.map +1 -1
  27. package/dist/adapters/vanilla.d.ts +3 -3
  28. package/dist/adapters/vue/index.d.ts +299 -299
  29. package/dist/adapters/vue/index.js.map +1 -1
  30. package/dist/adapters/vue.d.ts +3 -3
  31. package/dist/ai/wu-ai.js.map +1 -1
  32. package/dist/core/wu-html-parser.js +2 -0
  33. package/dist/core/wu-html-parser.js.map +1 -0
  34. package/dist/core/wu-iframe-sandbox.js +2 -0
  35. package/dist/core/wu-iframe-sandbox.js.map +1 -0
  36. package/dist/core/wu-loader.js +2 -0
  37. package/dist/core/wu-loader.js.map +1 -0
  38. package/dist/core/wu-mcp-bridge.js.map +1 -1
  39. package/dist/core/wu-script-executor.js +2 -0
  40. package/dist/core/wu-script-executor.js.map +1 -0
  41. package/dist/wu-ai-browser-primitives-BDKXJlwc.js.map +1 -1
  42. package/dist/wu-framework.cjs.js +2 -2
  43. package/dist/wu-framework.cjs.js.map +1 -1
  44. package/dist/wu-framework.dev.js +8697 -9142
  45. package/dist/wu-framework.dev.js.map +1 -1
  46. package/dist/wu-framework.esm.js +2 -2
  47. package/dist/wu-framework.esm.js.map +1 -1
  48. package/dist/wu-framework.umd.js +2 -2
  49. package/dist/wu-framework.umd.js.map +1 -1
  50. package/dist/wu-logger-fJfUHBGA.js.map +1 -1
  51. package/integrations/astro/README.md +127 -127
  52. package/integrations/astro/WuApp.astro +63 -63
  53. package/integrations/astro/WuShell.astro +39 -39
  54. package/integrations/astro/index.js +68 -68
  55. package/integrations/astro/package.json +38 -38
  56. package/integrations/astro/types.d.ts +53 -53
  57. package/package.json +218 -218
  58. package/dist/wu-html-parser.js +0 -2
  59. package/dist/wu-html-parser.js.map +0 -1
  60. package/dist/wu-iframe-sandbox.js +0 -2
  61. package/dist/wu-iframe-sandbox.js.map +0 -1
  62. package/dist/wu-script-executor.js +0 -2
  63. package/dist/wu-script-executor.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/core/wu-logger.js","../../../src/adapters/vue/ai.js","../../../src/adapters/vue/index.js"],"sourcesContent":["/**\r\n * 📝 WU-LOGGER: Sistema de logging inteligente para entornos\r\n * Controla los logs automáticamente según el entorno\r\n */\r\n\r\nexport class WuLogger {\r\n constructor() {\r\n // Detectar entorno automáticamente\r\n this.isDevelopment = this.detectEnvironment();\r\n // En desarrollo: warn (menos ruido), en producción: error\r\n this.logLevel = this.isDevelopment ? 'warn' : 'error';\r\n\r\n this.levels = {\r\n debug: 0,\r\n info: 1,\r\n warn: 2,\r\n error: 3,\r\n silent: 4\r\n };\r\n }\r\n\r\n /**\r\n * Detectar si estamos en desarrollo\r\n */\r\n detectEnvironment() {\r\n // 1. Explicit flag takes priority\r\n if (typeof window !== 'undefined' && window.WU_DEBUG === true) return true;\r\n if (typeof window !== 'undefined' && window.WU_DEBUG === false) return false;\r\n\r\n // 2. NODE_ENV check (works in bundlers and Node)\r\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'production') return false;\r\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'development') return true;\r\n\r\n // 3. Browser heuristics (only if window exists)\r\n if (typeof window !== 'undefined' && window.location) {\r\n const hostname = window.location.hostname;\r\n if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '[::1]') return true;\r\n\r\n // URL param override\r\n try {\r\n if (new URLSearchParams(window.location.search).has('wu-debug')) return true;\r\n } catch {}\r\n }\r\n\r\n // 4. Default: assume production\r\n return false;\r\n }\r\n\r\n /**\r\n * Configurar nivel de logging\r\n */\r\n setLevel(level) {\r\n this.logLevel = level;\r\n return this;\r\n }\r\n\r\n /**\r\n * Habilitar/deshabilitar development mode\r\n */\r\n setDevelopment(isDev) {\r\n this.isDevelopment = isDev;\r\n this.logLevel = isDev ? 'debug' : 'error';\r\n return this;\r\n }\r\n\r\n /**\r\n * Verificar si debemos mostrar el log\r\n */\r\n shouldLog(level) {\r\n return this.levels[level] >= this.levels[this.logLevel];\r\n }\r\n\r\n /**\r\n * Logging methods\r\n */\r\n debug(...args) {\r\n if (this.shouldLog('debug')) {\r\n console.log(...args);\r\n }\r\n }\r\n\r\n info(...args) {\r\n if (this.shouldLog('info')) {\r\n console.info(...args);\r\n }\r\n }\r\n\r\n warn(...args) {\r\n if (this.shouldLog('warn')) {\r\n console.warn(...args);\r\n }\r\n }\r\n\r\n error(...args) {\r\n if (this.shouldLog('error')) {\r\n console.error(...args);\r\n }\r\n }\r\n\r\n /**\r\n * Logging con contexto Wu\r\n */\r\n wu(level, ...args) {\r\n if (this.shouldLog(level)) {\r\n const method = level === 'debug' ? 'log' : level;\r\n console[method]('[Wu]', ...args);\r\n }\r\n }\r\n\r\n /**\r\n * Helper methods específicos para Wu\r\n */\r\n wuDebug(...args) { this.wu('debug', ...args); }\r\n wuInfo(...args) { this.wu('info', ...args); }\r\n wuWarn(...args) { this.wu('warn', ...args); }\r\n wuError(...args) { this.wu('error', ...args); }\r\n}\r\n\r\n// Singleton instance\r\nexport const logger = new WuLogger();\r\n\r\n// Helper para compatibilidad con logs existentes\r\nexport const wuLog = {\r\n debug: (...args) => logger.wuDebug(...args),\r\n info: (...args) => logger.wuInfo(...args),\r\n warn: (...args) => logger.wuWarn(...args),\r\n error: (...args) => logger.wuError(...args)\r\n};\r\n\r\n/**\r\n * 🔇 Silenciar todos los logs de Wu Framework\r\n * Útil en producción para eliminar todo el ruido\r\n */\r\nexport function silenceAllLogs() {\r\n logger.setLevel('silent');\r\n}\r\n\r\n/**\r\n * 🔊 Restaurar logs (nivel debug)\r\n */\r\nexport function enableAllLogs() {\r\n logger.setLevel('debug');\r\n}","/**\r\n * WU-FRAMEWORK VUE AI INTEGRATION\r\n */\r\nfunction getWuInstance() {\r\n if (typeof window === 'undefined') return null;\r\n return window.wu || window.parent?.wu || window.top?.wu || null;\r\n}\r\n\r\nexport function createUseWuAI(Vue) {\r\n const { ref } = Vue;\r\n return function useWuAI(options = {}) {\r\n const { namespace = 'default' } = options;\r\n const messages = ref([]);\r\n const isStreaming = ref(false);\r\n const error = ref(null);\r\n async function send(text) {\r\n if (!text?.trim()) return;\r\n const wu = getWuInstance();\r\n if (!wu?.ai) { error.value = 'Wu AI not available'; return; }\r\n messages.value = [...messages.value, { id: `user-${Date.now()}`, role: 'user', content: text, timestamp: Date.now() }];\r\n error.value = null; isStreaming.value = true;\r\n try {\r\n const res = await wu.ai.send(text, { namespace });\r\n messages.value = [...messages.value, { id: `assistant-${Date.now()}`, role: 'assistant', content: res.content, timestamp: Date.now() }];\r\n } catch (err) { error.value = err.message || 'AI request failed'; }\r\n isStreaming.value = false;\r\n }\r\n function clear() { messages.value = []; error.value = null; }\r\n return { messages, isStreaming, error, send, clear };\r\n };\r\n}\r\n\r\nexport function useWuAI(options = {}) {\r\n const { namespace = 'default' } = options;\r\n const state = { messages: [], isStreaming: false, error: null };\r\n return {\r\n ...state,\r\n async send(text) {\r\n if (!text?.trim()) return null;\r\n const wu = getWuInstance();\r\n if (!wu?.ai) { state.error = 'Wu AI not available'; return null; }\r\n state.messages.push({ id: `user-${Date.now()}`, role: 'user', content: text, timestamp: Date.now() });\r\n state.isStreaming = true; state.error = null;\r\n try {\r\n const res = await wu.ai.send(text, { namespace });\r\n state.messages.push({ id: `assistant-${Date.now()}`, role: 'assistant', content: res.content, timestamp: Date.now() });\r\n state.isStreaming = false; return res;\r\n } catch (err) { state.error = err.message; state.isStreaming = false; return null; }\r\n },\r\n clear() { state.messages.length = 0; state.error = null; },\r\n };\r\n}\r\n","/**\r\n * 🚀 WU-FRAMEWORK VUE ADAPTER\r\n *\r\n * Simplifica la integración de Vue 3 con Wu Framework.\r\n * Convierte componentes Vue en microfrontends con UNA línea de código.\r\n *\r\n * @example\r\n * // Microfrontend (main.ts)\r\n * import { wuVue } from 'wu-framework/adapters/vue';\r\n * import App from './App.vue';\r\n *\r\n * wuVue.register('my-app', App);\r\n *\r\n * @example\r\n * // Shell (cargar microfrontend)\r\n * import { WuSlot } from 'wu-framework/adapters/vue';\r\n *\r\n * <WuSlot name=\"my-app\" url=\"http://localhost:3001\" />\r\n */\r\n\r\nimport { logger } from '../../core/wu-logger.js';\r\n\r\n// Estado global del adapter\r\nconst adapterState = {\r\n apps: new Map(),\r\n Vue: null,\r\n createApp: null,\r\n initialized: false\r\n};\r\n\r\n/**\r\n * Detecta y obtiene Vue del contexto global o lo importa\r\n */\r\nasync function ensureVue() {\r\n if (adapterState.initialized) return true;\r\n\r\n try {\r\n // Intentar obtener de window\r\n if (typeof window !== 'undefined' && window.Vue) {\r\n adapterState.Vue = window.Vue;\r\n adapterState.createApp = window.Vue.createApp;\r\n adapterState.initialized = true;\r\n return true;\r\n }\r\n\r\n // Intentar import dinámico\r\n const Vue = await import('vue');\r\n adapterState.Vue = Vue;\r\n adapterState.createApp = Vue.createApp;\r\n adapterState.initialized = true;\r\n return true;\r\n\r\n } catch (error) {\r\n console.error('[WuVue] Failed to load Vue:', error);\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Obtiene la instancia de Wu Framework\r\n */\r\nfunction getWuInstance() {\r\n if (typeof window === 'undefined') return null;\r\n\r\n return window.wu\r\n || window.parent?.wu\r\n || window.top?.wu\r\n || null;\r\n}\r\n\r\n/**\r\n * Espera a que Wu Framework esté disponible\r\n */\r\nfunction waitForWu(timeout = 5000) {\r\n return new Promise((resolve, reject) => {\r\n const wu = getWuInstance();\r\n if (wu) {\r\n resolve(wu);\r\n return;\r\n }\r\n\r\n const startTime = Date.now();\r\n\r\n const handleWuReady = () => {\r\n cleanup();\r\n resolve(getWuInstance());\r\n };\r\n\r\n window.addEventListener('wu:ready', handleWuReady);\r\n window.addEventListener('wu:app:ready', handleWuReady);\r\n\r\n const checkInterval = setInterval(() => {\r\n const wu = getWuInstance();\r\n if (wu) {\r\n cleanup();\r\n resolve(wu);\r\n return;\r\n }\r\n\r\n if (Date.now() - startTime > timeout) {\r\n cleanup();\r\n reject(new Error(`Wu Framework not found after ${timeout}ms`));\r\n }\r\n }, 200);\r\n\r\n function cleanup() {\r\n clearInterval(checkInterval);\r\n window.removeEventListener('wu:ready', handleWuReady);\r\n window.removeEventListener('wu:app:ready', handleWuReady);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Registra un componente Vue como microfrontend\r\n *\r\n * @param {string} appName - Nombre único del microfrontend (debe coincidir con wu.json)\r\n * @param {Object} RootComponent - Componente Vue principal (App.vue)\r\n * @param {Object} options - Opciones adicionales\r\n * @param {Function} options.setup - Función para configurar la app Vue (plugins, router, etc.)\r\n * @param {Object} options.props - Props iniciales para el componente\r\n * @param {Function} options.onMount - Callback después de montar\r\n * @param {Function} options.onUnmount - Callback antes de desmontar\r\n * @param {boolean} options.standalone - Permitir ejecución standalone (default: true)\r\n * @param {string} options.standaloneContainer - Selector para modo standalone (default: '#app')\r\n *\r\n * @example\r\n * // Básico\r\n * wuVue.register('my-app', App);\r\n *\r\n * @example\r\n * // Con plugins (Pinia, Router, etc.)\r\n * wuVue.register('my-app', App, {\r\n * setup: (app) => {\r\n * app.use(createPinia());\r\n * app.use(router);\r\n * app.component('MyGlobal', MyComponent);\r\n * }\r\n * });\r\n */\r\nasync function register(appName, RootComponent, options = {}) {\r\n const {\r\n setup = null,\r\n props = {},\r\n onMount = null,\r\n onUnmount = null,\r\n standalone = true,\r\n standaloneContainer = '#app'\r\n } = options;\r\n\r\n // Asegurar que Vue está disponible\r\n const hasVue = await ensureVue();\r\n if (!hasVue) {\r\n console.error(`[WuVue] Cannot register ${appName}: Vue not available`);\r\n return false;\r\n }\r\n\r\n const { createApp } = adapterState;\r\n\r\n // Función de mount interna\r\n const mountApp = (container) => {\r\n if (!container) {\r\n console.error(`[WuVue] Mount failed for ${appName}: container is null`);\r\n return;\r\n }\r\n\r\n // Evitar doble mount\r\n if (adapterState.apps.has(appName)) {\r\n logger.warn(`[WuVue] ${appName} already mounted, unmounting first`);\r\n unmountApp();\r\n }\r\n\r\n try {\r\n // Detectar si el container está dentro de un Shadow DOM\r\n let shadowRoot = null;\r\n let element = container;\r\n while (element && element !== document.body) {\r\n if (element.getRootNode && element.getRootNode() instanceof ShadowRoot) {\r\n shadowRoot = element.getRootNode();\r\n break;\r\n }\r\n element = element.parentElement || element.host;\r\n }\r\n\r\n // Crear la aplicación Vue\r\n const app = createApp(RootComponent, props);\r\n\r\n // Ejecutar setup personalizado (plugins, router, etc.)\r\n if (setup && typeof setup === 'function') {\r\n setup(app);\r\n }\r\n\r\n // Error handlers for debugging\r\n app.config.errorHandler = (err, instance, info) => {\r\n console.error(`[WuVue] ${appName} error in ${info}:`, err);\r\n };\r\n app.config.warnHandler = (msg, instance, trace) => {\r\n console.warn(`[WuVue] ${appName} warn:`, msg);\r\n };\r\n\r\n // Proveer información del contexto Wu\r\n app.provide('wuAppName', appName);\r\n app.provide('wuInstance', getWuInstance());\r\n\r\n // Montar\r\n app.mount(container);\r\n\r\n // Si está en Shadow DOM, copiar estilos de Vue al Shadow DOM\r\n if (shadowRoot) {\r\n // Esperar un poco para que Vue inyecte los estilos en el head\r\n setTimeout(() => {\r\n const vueStyles = document.querySelectorAll('style[data-vite-dev-id*=\"/' + appName + '/\"], style[data-vite-dev-id*=\"\\\\' + appName + '\\\\\"]');\r\n vueStyles.forEach(style => {\r\n // Verificar que no esté ya en el Shadow DOM\r\n const viteId = style.getAttribute('data-vite-dev-id');\r\n if (viteId && !shadowRoot.querySelector(`style[data-vite-dev-id=\"${viteId}\"]`)) {\r\n const clonedStyle = style.cloneNode(true);\r\n shadowRoot.insertBefore(clonedStyle, shadowRoot.firstChild);\r\n logger.debug(`[WuVue] ✅ Injected style into Shadow DOM: ${viteId}`);\r\n }\r\n });\r\n\r\n // También copiar estilos que contengan rutas del app en el viteId\r\n const allStyles = document.querySelectorAll('style[data-vite-dev-id]');\r\n allStyles.forEach(style => {\r\n const viteId = style.getAttribute('data-vite-dev-id');\r\n if (viteId && (viteId.includes(`/${appName}/`) || viteId.includes(`\\\\${appName}\\\\`))) {\r\n if (!shadowRoot.querySelector(`style[data-vite-dev-id=\"${viteId}\"]`)) {\r\n const clonedStyle = style.cloneNode(true);\r\n shadowRoot.insertBefore(clonedStyle, shadowRoot.firstChild);\r\n logger.debug(`[WuVue] ✅ Injected app style into Shadow DOM: ${viteId}`);\r\n }\r\n }\r\n });\r\n }, 100);\r\n }\r\n\r\n // Guardar referencia\r\n adapterState.apps.set(appName, { app, container });\r\n\r\n logger.debug(`[WuVue] ✅ ${appName} mounted successfully`);\r\n\r\n if (onMount) {\r\n onMount(container, app);\r\n }\r\n } catch (error) {\r\n console.error(`[WuVue] Mount error for ${appName}:`, error);\r\n throw error;\r\n }\r\n };\r\n\r\n // Función de unmount interna\r\n const unmountApp = (container) => {\r\n const instance = adapterState.apps.get(appName);\r\n\r\n if (instance) {\r\n try {\r\n if (onUnmount) {\r\n onUnmount(instance.container, instance.app);\r\n }\r\n\r\n instance.app.unmount();\r\n adapterState.apps.delete(appName);\r\n\r\n logger.debug(`[WuVue] ✅ ${appName} unmounted successfully`);\r\n } catch (error) {\r\n console.error(`[WuVue] Unmount error for ${appName}:`, error);\r\n }\r\n }\r\n\r\n // Limpiar container si se proporciona\r\n if (container) {\r\n container.innerHTML = '';\r\n }\r\n };\r\n\r\n // Intentar registrar con Wu Framework\r\n try {\r\n const wu = await waitForWu(3000);\r\n\r\n wu.define(appName, {\r\n mount: mountApp,\r\n unmount: unmountApp\r\n });\r\n\r\n logger.debug(`[WuVue] ✅ ${appName} registered with Wu Framework`);\r\n return true;\r\n\r\n } catch (error) {\r\n logger.warn(`[WuVue] Wu Framework not available for ${appName}`);\r\n\r\n // Modo standalone si está habilitado\r\n if (standalone) {\r\n const containerElement = document.querySelector(standaloneContainer);\r\n\r\n if (containerElement) {\r\n logger.debug(`[WuVue] Running ${appName} in standalone mode`);\r\n mountApp(containerElement);\r\n return true;\r\n } else {\r\n logger.warn(`[WuVue] Standalone container ${standaloneContainer} not found`);\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Crea un componente Vue para cargar microfrontends (para el Shell)\r\n *\r\n * @example\r\n * <script setup>\r\n * import { WuSlot } from 'wu-framework/adapters/vue';\r\n * </script>\r\n *\r\n * <template>\r\n * <WuSlot name=\"my-app\" url=\"http://localhost:3001\" />\r\n * </template>\r\n */\r\nconst WuSlot = {\r\n name: 'WuSlot',\r\n\r\n props: {\r\n name: {\r\n type: String,\r\n required: true\r\n },\r\n url: {\r\n type: String,\r\n required: true\r\n },\r\n appName: {\r\n type: String,\r\n default: null\r\n },\r\n fallbackText: {\r\n type: String,\r\n default: 'Loading...'\r\n }\r\n },\r\n\r\n emits: ['load', 'error', 'mount', 'unmount'],\r\n\r\n data() {\r\n return {\r\n loading: true,\r\n error: null,\r\n appInstance: null,\r\n containerId: null\r\n };\r\n },\r\n\r\n computed: {\r\n actualAppName() {\r\n return this.appName || this.name;\r\n }\r\n },\r\n\r\n async mounted() {\r\n await this.mountMicrofrontend();\r\n },\r\n\r\n beforeUnmount() {\r\n this.unmountMicrofrontend();\r\n },\r\n\r\n methods: {\r\n async mountMicrofrontend() {\r\n try {\r\n this.loading = true;\r\n this.error = null;\r\n\r\n const wu = getWuInstance();\r\n if (!wu) {\r\n throw new Error('Wu Framework not initialized');\r\n }\r\n\r\n // Crear container único\r\n this.containerId = `wu-slot-${this.actualAppName}-${Date.now()}`;\r\n const innerContainer = document.createElement('div');\r\n innerContainer.id = this.containerId;\r\n innerContainer.style.width = '100%';\r\n innerContainer.style.height = '100%';\r\n\r\n this.$refs.container.innerHTML = '';\r\n this.$refs.container.appendChild(innerContainer);\r\n\r\n // Crear y montar la app\r\n const app = wu.app(this.actualAppName, {\r\n url: this.url,\r\n container: `#${this.containerId}`,\r\n autoInit: true\r\n });\r\n\r\n this.appInstance = app;\r\n await app.mount();\r\n\r\n this.loading = false;\r\n this.$emit('load', { name: this.actualAppName, url: this.url });\r\n this.$emit('mount', { name: this.actualAppName, container: innerContainer });\r\n\r\n } catch (err) {\r\n console.error(`[WuSlot] Error loading ${this.actualAppName}:`, err);\r\n this.error = err.message || 'Failed to load microfrontend';\r\n this.loading = false;\r\n this.$emit('error', err);\r\n }\r\n },\r\n\r\n async unmountMicrofrontend() {\r\n if (this.appInstance) {\r\n this.$emit('unmount', { name: this.actualAppName });\r\n\r\n try {\r\n await this.appInstance.unmount();\r\n } catch (err) {\r\n logger.warn(`[WuSlot] Error unmounting ${this.actualAppName}:`, err);\r\n }\r\n\r\n this.appInstance = null;\r\n }\r\n }\r\n },\r\n\r\n template: `\r\n <div\r\n ref=\"container\"\r\n class=\"wu-slot\"\r\n :class=\"{ 'wu-slot-loading': loading, 'wu-slot-error': error }\"\r\n :data-wu-app=\"actualAppName\"\r\n :data-wu-url=\"url\"\r\n style=\"min-height: 100px; position: relative;\"\r\n >\r\n <div v-if=\"error\" class=\"wu-slot-error-message\" style=\"padding: 1rem; border: 1px solid #f5c6cb; border-radius: 4px; background: #f8d7da; color: #721c24;\">\r\n <strong>Error loading {{ name }}</strong>\r\n <p style=\"margin: 0.5rem 0 0 0;\">{{ error }}</p>\r\n </div>\r\n <div v-else-if=\"loading\" class=\"wu-slot-loading-message\" style=\"display: flex; align-items: center; justify-content: center; padding: 2rem; color: #666;\">\r\n {{ fallbackText || 'Loading ' + name + '...' }}\r\n </div>\r\n </div>\r\n `\r\n};\r\n\r\n/**\r\n * Composable para usar el EventBus de Wu Framework en Vue 3\r\n *\r\n * @example\r\n * <script setup>\r\n * import { useWuEvents } from 'wu-framework/adapters/vue';\r\n *\r\n * const { emit, on } = useWuEvents();\r\n *\r\n * onMounted(() => {\r\n * on('user:login', (data) => logger.debug(data));\r\n * });\r\n * </script>\r\n */\r\nfunction useWuEvents() {\r\n const subscriptions = [];\r\n\r\n const emit = (event, data, options) => {\r\n const wu = getWuInstance();\r\n if (wu?.eventBus) {\r\n wu.eventBus.emit(event, data, options);\r\n } else {\r\n logger.warn('[useWuEvents] Wu Framework not available');\r\n }\r\n };\r\n\r\n const on = (event, callback) => {\r\n const wu = getWuInstance();\r\n if (wu?.eventBus) {\r\n const unsubscribe = wu.eventBus.on(event, callback);\r\n subscriptions.push(unsubscribe);\r\n return unsubscribe;\r\n }\r\n logger.warn('[useWuEvents] Wu Framework not available');\r\n return () => {};\r\n };\r\n\r\n const once = (event, callback) => {\r\n const wu = getWuInstance();\r\n if (wu?.eventBus) {\r\n return wu.eventBus.once(event, callback);\r\n }\r\n logger.warn('[useWuEvents] Wu Framework not available');\r\n return () => {};\r\n };\r\n\r\n const off = (event, callback) => {\r\n const wu = getWuInstance();\r\n if (wu?.eventBus) {\r\n wu.eventBus.off(event, callback);\r\n }\r\n };\r\n\r\n // Cleanup - llamar en onUnmounted\r\n const cleanup = () => {\r\n subscriptions.forEach(unsub => unsub());\r\n subscriptions.length = 0;\r\n };\r\n\r\n return { emit, on, once, off, cleanup };\r\n}\r\n\r\n/**\r\n * Composable para usar el Store de Wu Framework en Vue 3\r\n *\r\n * @example\r\n * <script setup>\r\n * import { useWuStore } from 'wu-framework/adapters/vue';\r\n *\r\n * const { state, setState, getState } = useWuStore('user');\r\n *\r\n * // state es reactivo!\r\n * logger.debug(state.value);\r\n * </script>\r\n */\r\nfunction useWuStore(namespace = '') {\r\n // Importar ref y watch de Vue si están disponibles\r\n const Vue = adapterState.Vue;\r\n let state;\r\n let unsubscribe = null;\r\n\r\n // Crear estado reactivo si Vue está disponible\r\n if (Vue?.ref) {\r\n const wu = getWuInstance();\r\n const initialValue = wu?.store?.get(namespace) || null;\r\n state = Vue.ref(initialValue);\r\n\r\n // Suscribirse a cambios\r\n if (wu?.store) {\r\n const pattern = namespace ? `${namespace}.*` : '*';\r\n unsubscribe = wu.store.on(pattern, () => {\r\n state.value = wu.store.get(namespace);\r\n });\r\n }\r\n } else {\r\n // Fallback sin reactividad\r\n state = { value: null };\r\n }\r\n\r\n const setState = (path, value) => {\r\n const wu = getWuInstance();\r\n if (wu?.store) {\r\n const fullPath = namespace ? `${namespace}.${path}` : path;\r\n wu.store.set(fullPath, value);\r\n }\r\n };\r\n\r\n const getState = (path = '') => {\r\n const wu = getWuInstance();\r\n if (wu?.store) {\r\n const fullPath = namespace ? (path ? `${namespace}.${path}` : namespace) : path;\r\n return wu.store.get(fullPath);\r\n }\r\n return null;\r\n };\r\n\r\n const cleanup = () => {\r\n if (unsubscribe) {\r\n unsubscribe();\r\n unsubscribe = null;\r\n }\r\n };\r\n\r\n return { state, setState, getState, cleanup };\r\n}\r\n\r\n/**\r\n * Plugin de Vue para instalar Wu Framework globalmente\r\n *\r\n * @example\r\n * import { createApp } from 'vue';\r\n * import { wuVuePlugin } from 'wu-framework/adapters/vue';\r\n *\r\n * const app = createApp(App);\r\n * app.use(wuVuePlugin);\r\n */\r\nconst wuVuePlugin = {\r\n install(app, options = {}) {\r\n // Registrar componente WuSlot globalmente\r\n app.component('WuSlot', WuSlot);\r\n\r\n // Proveer acceso global a Wu\r\n app.provide('wu', getWuInstance());\r\n\r\n // Agregar propiedades globales\r\n app.config.globalProperties.$wu = getWuInstance();\r\n app.config.globalProperties.$wuEvents = useWuEvents();\r\n app.config.globalProperties.$wuStore = (ns) => useWuStore(ns);\r\n\r\n logger.debug('[WuVue] Plugin installed');\r\n }\r\n};\r\n\r\n// ============================================\r\n// AI INTEGRATION\r\n// ============================================\r\nimport { createUseWuAI, useWuAI } from './ai.js';\r\n\r\n// API pública del adapter\r\nexport const wuVue = {\r\n register,\r\n WuSlot,\r\n useWuEvents,\r\n useWuStore,\r\n wuVuePlugin,\r\n createUseWuAI,\r\n useWuAI,\r\n getWuInstance,\r\n waitForWu\r\n};\r\n\r\nexport {\r\n register,\r\n WuSlot,\r\n useWuEvents,\r\n useWuStore,\r\n wuVuePlugin,\r\n createUseWuAI,\r\n useWuAI,\r\n getWuInstance,\r\n waitForWu\r\n};\r\n\r\nexport default wuVue;\r\n"],"names":["logger","constructor","this","isDevelopment","detectEnvironment","logLevel","levels","debug","info","warn","error","silent","window","WU_DEBUG","process","env","NODE_ENV","location","hostname","URLSearchParams","search","has","setLevel","level","setDevelopment","isDev","shouldLog","args","console","log","wu","wuDebug","wuInfo","wuWarn","wuError","getWuInstance","parent","top","createUseWuAI","Vue","ref","options","namespace","messages","isStreaming","send","async","text","trim","ai","value","id","Date","now","role","content","timestamp","res","err","message","clear","useWuAI","state","push","length","adapterState","apps","Map","createApp","initialized","waitForWu","timeout","Promise","resolve","reject","startTime","handleWuReady","cleanup","addEventListener","checkInterval","setInterval","Error","clearInterval","removeEventListener","register","appName","RootComponent","setup","props","onMount","onUnmount","standalone","standaloneContainer","import","ensureVue","mountApp","container","unmountApp","shadowRoot","element","document","body","getRootNode","ShadowRoot","parentElement","host","app","config","errorHandler","instance","warnHandler","msg","trace","provide","mount","setTimeout","querySelectorAll","forEach","style","viteId","getAttribute","querySelector","clonedStyle","cloneNode","insertBefore","firstChild","includes","set","get","unmount","delete","innerHTML","define","containerElement","WuSlot","name","type","String","required","url","default","fallbackText","emits","data","loading","appInstance","containerId","computed","actualAppName","mounted","mountMicrofrontend","beforeUnmount","unmountMicrofrontend","methods","innerContainer","createElement","width","height","$refs","appendChild","autoInit","$emit","template","useWuEvents","subscriptions","emit","event","eventBus","on","callback","unsubscribe","once","off","unsub","useWuStore","initialValue","store","pattern","setState","path","fullPath","getState","wuVuePlugin","install","component","globalProperties","$wu","$wuEvents","$wuStore","ns","wuVue"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/core/wu-logger.js","../../../src/adapters/vue/ai.js","../../../src/adapters/vue/index.js"],"sourcesContent":["/**\n * 📝 WU-LOGGER: Sistema de logging inteligente para entornos\n * Controla los logs automáticamente según el entorno\n */\n\nexport class WuLogger {\n constructor() {\n // Detectar entorno automáticamente\n this.isDevelopment = this.detectEnvironment();\n // En desarrollo: warn (menos ruido), en producción: error\n this.logLevel = this.isDevelopment ? 'warn' : 'error';\n\n this.levels = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n silent: 4\n };\n }\n\n /**\n * Detectar si estamos en desarrollo\n */\n detectEnvironment() {\n // 1. Explicit flag takes priority\n if (typeof window !== 'undefined' && window.WU_DEBUG === true) return true;\n if (typeof window !== 'undefined' && window.WU_DEBUG === false) return false;\n\n // 2. NODE_ENV check (works in bundlers and Node)\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'production') return false;\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'development') return true;\n\n // 3. Browser heuristics (only if window exists)\n if (typeof window !== 'undefined' && window.location) {\n const hostname = window.location.hostname;\n if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '[::1]') return true;\n\n // URL param override\n try {\n if (new URLSearchParams(window.location.search).has('wu-debug')) return true;\n } catch {}\n }\n\n // 4. Default: assume production\n return false;\n }\n\n /**\n * Configurar nivel de logging\n */\n setLevel(level) {\n this.logLevel = level;\n return this;\n }\n\n /**\n * Habilitar/deshabilitar development mode\n */\n setDevelopment(isDev) {\n this.isDevelopment = isDev;\n this.logLevel = isDev ? 'debug' : 'error';\n return this;\n }\n\n /**\n * Verificar si debemos mostrar el log\n */\n shouldLog(level) {\n return this.levels[level] >= this.levels[this.logLevel];\n }\n\n /**\n * Logging methods\n */\n debug(...args) {\n if (this.shouldLog('debug')) {\n console.log(...args);\n }\n }\n\n info(...args) {\n if (this.shouldLog('info')) {\n console.info(...args);\n }\n }\n\n warn(...args) {\n if (this.shouldLog('warn')) {\n console.warn(...args);\n }\n }\n\n error(...args) {\n if (this.shouldLog('error')) {\n console.error(...args);\n }\n }\n\n /**\n * Logging con contexto Wu\n */\n wu(level, ...args) {\n if (this.shouldLog(level)) {\n const method = level === 'debug' ? 'log' : level;\n console[method]('[Wu]', ...args);\n }\n }\n\n /**\n * Helper methods específicos para Wu\n */\n wuDebug(...args) { this.wu('debug', ...args); }\n wuInfo(...args) { this.wu('info', ...args); }\n wuWarn(...args) { this.wu('warn', ...args); }\n wuError(...args) { this.wu('error', ...args); }\n}\n\n// Singleton instance\nexport const logger = new WuLogger();\n\n// Helper para compatibilidad con logs existentes\nexport const wuLog = {\n debug: (...args) => logger.wuDebug(...args),\n info: (...args) => logger.wuInfo(...args),\n warn: (...args) => logger.wuWarn(...args),\n error: (...args) => logger.wuError(...args)\n};\n\n/**\n * 🔇 Silenciar todos los logs de Wu Framework\n * Útil en producción para eliminar todo el ruido\n */\nexport function silenceAllLogs() {\n logger.setLevel('silent');\n}\n\n/**\n * 🔊 Restaurar logs (nivel debug)\n */\nexport function enableAllLogs() {\n logger.setLevel('debug');\n}","/**\n * WU-FRAMEWORK VUE AI INTEGRATION\n */\nfunction getWuInstance() {\n if (typeof window === 'undefined') return null;\n return window.wu || window.parent?.wu || window.top?.wu || null;\n}\n\nexport function createUseWuAI(Vue) {\n const { ref } = Vue;\n return function useWuAI(options = {}) {\n const { namespace = 'default' } = options;\n const messages = ref([]);\n const isStreaming = ref(false);\n const error = ref(null);\n async function send(text) {\n if (!text?.trim()) return;\n const wu = getWuInstance();\n if (!wu?.ai) { error.value = 'Wu AI not available'; return; }\n messages.value = [...messages.value, { id: `user-${Date.now()}`, role: 'user', content: text, timestamp: Date.now() }];\n error.value = null; isStreaming.value = true;\n try {\n const res = await wu.ai.send(text, { namespace });\n messages.value = [...messages.value, { id: `assistant-${Date.now()}`, role: 'assistant', content: res.content, timestamp: Date.now() }];\n } catch (err) { error.value = err.message || 'AI request failed'; }\n isStreaming.value = false;\n }\n function clear() { messages.value = []; error.value = null; }\n return { messages, isStreaming, error, send, clear };\n };\n}\n\nexport function useWuAI(options = {}) {\n const { namespace = 'default' } = options;\n const state = { messages: [], isStreaming: false, error: null };\n return {\n ...state,\n async send(text) {\n if (!text?.trim()) return null;\n const wu = getWuInstance();\n if (!wu?.ai) { state.error = 'Wu AI not available'; return null; }\n state.messages.push({ id: `user-${Date.now()}`, role: 'user', content: text, timestamp: Date.now() });\n state.isStreaming = true; state.error = null;\n try {\n const res = await wu.ai.send(text, { namespace });\n state.messages.push({ id: `assistant-${Date.now()}`, role: 'assistant', content: res.content, timestamp: Date.now() });\n state.isStreaming = false; return res;\n } catch (err) { state.error = err.message; state.isStreaming = false; return null; }\n },\n clear() { state.messages.length = 0; state.error = null; },\n };\n}\n","/**\n * 🚀 WU-FRAMEWORK VUE ADAPTER\n *\n * Simplifica la integración de Vue 3 con Wu Framework.\n * Convierte componentes Vue en microfrontends con UNA línea de código.\n *\n * @example\n * // Microfrontend (main.ts)\n * import { wuVue } from 'wu-framework/adapters/vue';\n * import App from './App.vue';\n *\n * wuVue.register('my-app', App);\n *\n * @example\n * // Shell (cargar microfrontend)\n * import { WuSlot } from 'wu-framework/adapters/vue';\n *\n * <WuSlot name=\"my-app\" url=\"http://localhost:3001\" />\n */\n\nimport { logger } from '../../core/wu-logger.js';\n\n// Estado global del adapter\nconst adapterState = {\n apps: new Map(),\n Vue: null,\n createApp: null,\n initialized: false\n};\n\n/**\n * Detecta y obtiene Vue del contexto global o lo importa\n */\nasync function ensureVue() {\n if (adapterState.initialized) return true;\n\n try {\n // Intentar obtener de window\n if (typeof window !== 'undefined' && window.Vue) {\n adapterState.Vue = window.Vue;\n adapterState.createApp = window.Vue.createApp;\n adapterState.initialized = true;\n return true;\n }\n\n // Intentar import dinámico\n const Vue = await import('vue');\n adapterState.Vue = Vue;\n adapterState.createApp = Vue.createApp;\n adapterState.initialized = true;\n return true;\n\n } catch (error) {\n console.error('[WuVue] Failed to load Vue:', error);\n return false;\n }\n}\n\n/**\n * Obtiene la instancia de Wu Framework\n */\nfunction getWuInstance() {\n if (typeof window === 'undefined') return null;\n\n return window.wu\n || window.parent?.wu\n || window.top?.wu\n || null;\n}\n\n/**\n * Espera a que Wu Framework esté disponible\n */\nfunction waitForWu(timeout = 5000) {\n return new Promise((resolve, reject) => {\n const wu = getWuInstance();\n if (wu) {\n resolve(wu);\n return;\n }\n\n const startTime = Date.now();\n\n const handleWuReady = () => {\n cleanup();\n resolve(getWuInstance());\n };\n\n window.addEventListener('wu:ready', handleWuReady);\n window.addEventListener('wu:app:ready', handleWuReady);\n\n const checkInterval = setInterval(() => {\n const wu = getWuInstance();\n if (wu) {\n cleanup();\n resolve(wu);\n return;\n }\n\n if (Date.now() - startTime > timeout) {\n cleanup();\n reject(new Error(`Wu Framework not found after ${timeout}ms`));\n }\n }, 200);\n\n function cleanup() {\n clearInterval(checkInterval);\n window.removeEventListener('wu:ready', handleWuReady);\n window.removeEventListener('wu:app:ready', handleWuReady);\n }\n });\n}\n\n/**\n * Registra un componente Vue como microfrontend\n *\n * @param {string} appName - Nombre único del microfrontend (debe coincidir con wu.json)\n * @param {Object} RootComponent - Componente Vue principal (App.vue)\n * @param {Object} options - Opciones adicionales\n * @param {Function} options.setup - Función para configurar la app Vue (plugins, router, etc.)\n * @param {Object} options.props - Props iniciales para el componente\n * @param {Function} options.onMount - Callback después de montar\n * @param {Function} options.onUnmount - Callback antes de desmontar\n * @param {boolean} options.standalone - Permitir ejecución standalone (default: true)\n * @param {string} options.standaloneContainer - Selector para modo standalone (default: '#app')\n *\n * @example\n * // Básico\n * wuVue.register('my-app', App);\n *\n * @example\n * // Con plugins (Pinia, Router, etc.)\n * wuVue.register('my-app', App, {\n * setup: (app) => {\n * app.use(createPinia());\n * app.use(router);\n * app.component('MyGlobal', MyComponent);\n * }\n * });\n */\nasync function register(appName, RootComponent, options = {}) {\n const {\n setup = null,\n props = {},\n onMount = null,\n onUnmount = null,\n standalone = true,\n standaloneContainer = '#app'\n } = options;\n\n // Asegurar que Vue está disponible\n const hasVue = await ensureVue();\n if (!hasVue) {\n console.error(`[WuVue] Cannot register ${appName}: Vue not available`);\n return false;\n }\n\n const { createApp } = adapterState;\n\n // Función de mount interna\n const mountApp = (container) => {\n if (!container) {\n console.error(`[WuVue] Mount failed for ${appName}: container is null`);\n return;\n }\n\n // Evitar doble mount\n if (adapterState.apps.has(appName)) {\n logger.warn(`[WuVue] ${appName} already mounted, unmounting first`);\n unmountApp();\n }\n\n try {\n // Detectar si el container está dentro de un Shadow DOM\n let shadowRoot = null;\n let element = container;\n while (element && element !== document.body) {\n if (element.getRootNode && element.getRootNode() instanceof ShadowRoot) {\n shadowRoot = element.getRootNode();\n break;\n }\n element = element.parentElement || element.host;\n }\n\n // Crear la aplicación Vue\n const app = createApp(RootComponent, props);\n\n // Ejecutar setup personalizado (plugins, router, etc.)\n if (setup && typeof setup === 'function') {\n setup(app);\n }\n\n // Error handlers for debugging\n app.config.errorHandler = (err, instance, info) => {\n console.error(`[WuVue] ${appName} error in ${info}:`, err);\n };\n app.config.warnHandler = (msg, instance, trace) => {\n console.warn(`[WuVue] ${appName} warn:`, msg);\n };\n\n // Proveer información del contexto Wu\n app.provide('wuAppName', appName);\n app.provide('wuInstance', getWuInstance());\n\n // Montar\n app.mount(container);\n\n // Si está en Shadow DOM, copiar estilos de Vue al Shadow DOM\n if (shadowRoot) {\n // Esperar un poco para que Vue inyecte los estilos en el head\n setTimeout(() => {\n const vueStyles = document.querySelectorAll('style[data-vite-dev-id*=\"/' + appName + '/\"], style[data-vite-dev-id*=\"\\\\' + appName + '\\\\\"]');\n vueStyles.forEach(style => {\n // Verificar que no esté ya en el Shadow DOM\n const viteId = style.getAttribute('data-vite-dev-id');\n if (viteId && !shadowRoot.querySelector(`style[data-vite-dev-id=\"${viteId}\"]`)) {\n const clonedStyle = style.cloneNode(true);\n shadowRoot.insertBefore(clonedStyle, shadowRoot.firstChild);\n logger.debug(`[WuVue] ✅ Injected style into Shadow DOM: ${viteId}`);\n }\n });\n\n // También copiar estilos que contengan rutas del app en el viteId\n const allStyles = document.querySelectorAll('style[data-vite-dev-id]');\n allStyles.forEach(style => {\n const viteId = style.getAttribute('data-vite-dev-id');\n if (viteId && (viteId.includes(`/${appName}/`) || viteId.includes(`\\\\${appName}\\\\`))) {\n if (!shadowRoot.querySelector(`style[data-vite-dev-id=\"${viteId}\"]`)) {\n const clonedStyle = style.cloneNode(true);\n shadowRoot.insertBefore(clonedStyle, shadowRoot.firstChild);\n logger.debug(`[WuVue] ✅ Injected app style into Shadow DOM: ${viteId}`);\n }\n }\n });\n }, 100);\n }\n\n // Guardar referencia\n adapterState.apps.set(appName, { app, container });\n\n logger.debug(`[WuVue] ✅ ${appName} mounted successfully`);\n\n if (onMount) {\n onMount(container, app);\n }\n } catch (error) {\n console.error(`[WuVue] Mount error for ${appName}:`, error);\n throw error;\n }\n };\n\n // Función de unmount interna\n const unmountApp = (container) => {\n const instance = adapterState.apps.get(appName);\n\n if (instance) {\n try {\n if (onUnmount) {\n onUnmount(instance.container, instance.app);\n }\n\n instance.app.unmount();\n adapterState.apps.delete(appName);\n\n logger.debug(`[WuVue] ✅ ${appName} unmounted successfully`);\n } catch (error) {\n console.error(`[WuVue] Unmount error for ${appName}:`, error);\n }\n }\n\n // Limpiar container si se proporciona\n if (container) {\n container.innerHTML = '';\n }\n };\n\n // Intentar registrar con Wu Framework\n try {\n const wu = await waitForWu(3000);\n\n wu.define(appName, {\n mount: mountApp,\n unmount: unmountApp\n });\n\n logger.debug(`[WuVue] ✅ ${appName} registered with Wu Framework`);\n return true;\n\n } catch (error) {\n logger.warn(`[WuVue] Wu Framework not available for ${appName}`);\n\n // Modo standalone si está habilitado\n if (standalone) {\n const containerElement = document.querySelector(standaloneContainer);\n\n if (containerElement) {\n logger.debug(`[WuVue] Running ${appName} in standalone mode`);\n mountApp(containerElement);\n return true;\n } else {\n logger.warn(`[WuVue] Standalone container ${standaloneContainer} not found`);\n }\n }\n\n return false;\n }\n}\n\n/**\n * Crea un componente Vue para cargar microfrontends (para el Shell)\n *\n * @example\n * <script setup>\n * import { WuSlot } from 'wu-framework/adapters/vue';\n * </script>\n *\n * <template>\n * <WuSlot name=\"my-app\" url=\"http://localhost:3001\" />\n * </template>\n */\nconst WuSlot = {\n name: 'WuSlot',\n\n props: {\n name: {\n type: String,\n required: true\n },\n url: {\n type: String,\n required: true\n },\n appName: {\n type: String,\n default: null\n },\n fallbackText: {\n type: String,\n default: 'Loading...'\n }\n },\n\n emits: ['load', 'error', 'mount', 'unmount'],\n\n data() {\n return {\n loading: true,\n error: null,\n appInstance: null,\n containerId: null\n };\n },\n\n computed: {\n actualAppName() {\n return this.appName || this.name;\n }\n },\n\n async mounted() {\n await this.mountMicrofrontend();\n },\n\n beforeUnmount() {\n this.unmountMicrofrontend();\n },\n\n methods: {\n async mountMicrofrontend() {\n try {\n this.loading = true;\n this.error = null;\n\n const wu = getWuInstance();\n if (!wu) {\n throw new Error('Wu Framework not initialized');\n }\n\n // Crear container único\n this.containerId = `wu-slot-${this.actualAppName}-${Date.now()}`;\n const innerContainer = document.createElement('div');\n innerContainer.id = this.containerId;\n innerContainer.style.width = '100%';\n innerContainer.style.height = '100%';\n\n this.$refs.container.innerHTML = '';\n this.$refs.container.appendChild(innerContainer);\n\n // Crear y montar la app\n const app = wu.app(this.actualAppName, {\n url: this.url,\n container: `#${this.containerId}`,\n autoInit: true\n });\n\n this.appInstance = app;\n await app.mount();\n\n this.loading = false;\n this.$emit('load', { name: this.actualAppName, url: this.url });\n this.$emit('mount', { name: this.actualAppName, container: innerContainer });\n\n } catch (err) {\n console.error(`[WuSlot] Error loading ${this.actualAppName}:`, err);\n this.error = err.message || 'Failed to load microfrontend';\n this.loading = false;\n this.$emit('error', err);\n }\n },\n\n async unmountMicrofrontend() {\n if (this.appInstance) {\n this.$emit('unmount', { name: this.actualAppName });\n\n try {\n await this.appInstance.unmount();\n } catch (err) {\n logger.warn(`[WuSlot] Error unmounting ${this.actualAppName}:`, err);\n }\n\n this.appInstance = null;\n }\n }\n },\n\n template: `\n <div\n ref=\"container\"\n class=\"wu-slot\"\n :class=\"{ 'wu-slot-loading': loading, 'wu-slot-error': error }\"\n :data-wu-app=\"actualAppName\"\n :data-wu-url=\"url\"\n style=\"min-height: 100px; position: relative;\"\n >\n <div v-if=\"error\" class=\"wu-slot-error-message\" style=\"padding: 1rem; border: 1px solid #f5c6cb; border-radius: 4px; background: #f8d7da; color: #721c24;\">\n <strong>Error loading {{ name }}</strong>\n <p style=\"margin: 0.5rem 0 0 0;\">{{ error }}</p>\n </div>\n <div v-else-if=\"loading\" class=\"wu-slot-loading-message\" style=\"display: flex; align-items: center; justify-content: center; padding: 2rem; color: #666;\">\n {{ fallbackText || 'Loading ' + name + '...' }}\n </div>\n </div>\n `\n};\n\n/**\n * Composable para usar el EventBus de Wu Framework en Vue 3\n *\n * @example\n * <script setup>\n * import { useWuEvents } from 'wu-framework/adapters/vue';\n *\n * const { emit, on } = useWuEvents();\n *\n * onMounted(() => {\n * on('user:login', (data) => logger.debug(data));\n * });\n * </script>\n */\nfunction useWuEvents() {\n const subscriptions = [];\n\n const emit = (event, data, options) => {\n const wu = getWuInstance();\n if (wu?.eventBus) {\n wu.eventBus.emit(event, data, options);\n } else {\n logger.warn('[useWuEvents] Wu Framework not available');\n }\n };\n\n const on = (event, callback) => {\n const wu = getWuInstance();\n if (wu?.eventBus) {\n const unsubscribe = wu.eventBus.on(event, callback);\n subscriptions.push(unsubscribe);\n return unsubscribe;\n }\n logger.warn('[useWuEvents] Wu Framework not available');\n return () => {};\n };\n\n const once = (event, callback) => {\n const wu = getWuInstance();\n if (wu?.eventBus) {\n return wu.eventBus.once(event, callback);\n }\n logger.warn('[useWuEvents] Wu Framework not available');\n return () => {};\n };\n\n const off = (event, callback) => {\n const wu = getWuInstance();\n if (wu?.eventBus) {\n wu.eventBus.off(event, callback);\n }\n };\n\n // Cleanup - llamar en onUnmounted\n const cleanup = () => {\n subscriptions.forEach(unsub => unsub());\n subscriptions.length = 0;\n };\n\n return { emit, on, once, off, cleanup };\n}\n\n/**\n * Composable para usar el Store de Wu Framework en Vue 3\n *\n * @example\n * <script setup>\n * import { useWuStore } from 'wu-framework/adapters/vue';\n *\n * const { state, setState, getState } = useWuStore('user');\n *\n * // state es reactivo!\n * logger.debug(state.value);\n * </script>\n */\nfunction useWuStore(namespace = '') {\n // Importar ref y watch de Vue si están disponibles\n const Vue = adapterState.Vue;\n let state;\n let unsubscribe = null;\n\n // Crear estado reactivo si Vue está disponible\n if (Vue?.ref) {\n const wu = getWuInstance();\n const initialValue = wu?.store?.get(namespace) || null;\n state = Vue.ref(initialValue);\n\n // Suscribirse a cambios\n if (wu?.store) {\n const pattern = namespace ? `${namespace}.*` : '*';\n unsubscribe = wu.store.on(pattern, () => {\n state.value = wu.store.get(namespace);\n });\n }\n } else {\n // Fallback sin reactividad\n state = { value: null };\n }\n\n const setState = (path, value) => {\n const wu = getWuInstance();\n if (wu?.store) {\n const fullPath = namespace ? `${namespace}.${path}` : path;\n wu.store.set(fullPath, value);\n }\n };\n\n const getState = (path = '') => {\n const wu = getWuInstance();\n if (wu?.store) {\n const fullPath = namespace ? (path ? `${namespace}.${path}` : namespace) : path;\n return wu.store.get(fullPath);\n }\n return null;\n };\n\n const cleanup = () => {\n if (unsubscribe) {\n unsubscribe();\n unsubscribe = null;\n }\n };\n\n return { state, setState, getState, cleanup };\n}\n\n/**\n * Plugin de Vue para instalar Wu Framework globalmente\n *\n * @example\n * import { createApp } from 'vue';\n * import { wuVuePlugin } from 'wu-framework/adapters/vue';\n *\n * const app = createApp(App);\n * app.use(wuVuePlugin);\n */\nconst wuVuePlugin = {\n install(app, options = {}) {\n // Registrar componente WuSlot globalmente\n app.component('WuSlot', WuSlot);\n\n // Proveer acceso global a Wu\n app.provide('wu', getWuInstance());\n\n // Agregar propiedades globales\n app.config.globalProperties.$wu = getWuInstance();\n app.config.globalProperties.$wuEvents = useWuEvents();\n app.config.globalProperties.$wuStore = (ns) => useWuStore(ns);\n\n logger.debug('[WuVue] Plugin installed');\n }\n};\n\n// ============================================\n// AI INTEGRATION\n// ============================================\nimport { createUseWuAI, useWuAI } from './ai.js';\n\n// API pública del adapter\nexport const wuVue = {\n register,\n WuSlot,\n useWuEvents,\n useWuStore,\n wuVuePlugin,\n createUseWuAI,\n useWuAI,\n getWuInstance,\n waitForWu\n};\n\nexport {\n register,\n WuSlot,\n useWuEvents,\n useWuStore,\n wuVuePlugin,\n createUseWuAI,\n useWuAI,\n getWuInstance,\n waitForWu\n};\n\nexport default wuVue;\n"],"names":["logger","constructor","this","isDevelopment","detectEnvironment","logLevel","levels","debug","info","warn","error","silent","window","WU_DEBUG","process","env","NODE_ENV","location","hostname","URLSearchParams","search","has","setLevel","level","setDevelopment","isDev","shouldLog","args","console","log","wu","wuDebug","wuInfo","wuWarn","wuError","getWuInstance","parent","top","createUseWuAI","Vue","ref","options","namespace","messages","isStreaming","send","async","text","trim","ai","value","id","Date","now","role","content","timestamp","res","err","message","clear","useWuAI","state","push","length","adapterState","apps","Map","createApp","initialized","waitForWu","timeout","Promise","resolve","reject","startTime","handleWuReady","cleanup","addEventListener","checkInterval","setInterval","Error","clearInterval","removeEventListener","register","appName","RootComponent","setup","props","onMount","onUnmount","standalone","standaloneContainer","import","ensureVue","mountApp","container","unmountApp","shadowRoot","element","document","body","getRootNode","ShadowRoot","parentElement","host","app","config","errorHandler","instance","warnHandler","msg","trace","provide","mount","setTimeout","querySelectorAll","forEach","style","viteId","getAttribute","querySelector","clonedStyle","cloneNode","insertBefore","firstChild","includes","set","get","unmount","delete","innerHTML","define","containerElement","WuSlot","name","type","String","required","url","default","fallbackText","emits","data","loading","appInstance","containerId","computed","actualAppName","mounted","mountMicrofrontend","beforeUnmount","unmountMicrofrontend","methods","innerContainer","createElement","width","height","$refs","appendChild","autoInit","$emit","template","useWuEvents","subscriptions","emit","event","eventBus","on","callback","unsubscribe","once","off","unsub","useWuStore","initialValue","store","pattern","setState","path","fullPath","getState","wuVuePlugin","install","component","globalProperties","$wu","$wuEvents","$wuStore","ns","wuVue"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- // Re-export from folder structure — backward compatibility
2
- export * from './vue/index';
3
- export { default } from './vue/index';
1
+ // Re-export from folder structure — backward compatibility
2
+ export * from './vue/index';
3
+ export { default } from './vue/index';