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,179 +1,179 @@
1
- /**
2
- * 🚀 WU-FRAMEWORK VANILLA JS ADAPTER - TypeScript Declarations
3
- */
4
-
5
- import type { WuCore } from '../core/wu-core';
6
-
7
- /**
8
- * Configuración de app Vanilla
9
- */
10
- export interface VanillaAppConfig {
11
- /** Función para renderizar */
12
- render: (container: HTMLElement, state?: any) => void;
13
- /** Función para limpiar (opcional) */
14
- destroy?: (container: HTMLElement, state?: any) => void;
15
- /** Función de inicialización (opcional) */
16
- init?: (container: HTMLElement, state?: any) => void;
17
- /** Estado inicial */
18
- state?: Record<string, any>;
19
- }
20
-
21
- /**
22
- * Opciones de registro Vanilla
23
- */
24
- export interface VanillaRegisterOptions {
25
- /** Callback después de montar */
26
- onMount?: (container: HTMLElement, state: any) => void;
27
- /** Callback antes de desmontar */
28
- onUnmount?: (container: HTMLElement, state: any) => void;
29
- /** Permitir ejecución standalone */
30
- standalone?: boolean;
31
- /** Selector para modo standalone */
32
- standaloneContainer?: string;
33
- }
34
-
35
- /**
36
- * Opciones para registrar clase
37
- */
38
- export interface VanillaClassOptions {
39
- /** Argumentos para el constructor */
40
- constructorArgs?: any[];
41
- /** Callback después de montar */
42
- onMount?: (container: HTMLElement, instance: any) => void;
43
- /** Callback antes de desmontar */
44
- onUnmount?: (container: HTMLElement, instance: any) => void;
45
- /** Permitir ejecución standalone */
46
- standalone?: boolean;
47
- /** Selector para modo standalone */
48
- standaloneContainer?: string;
49
- }
50
-
51
- /**
52
- * Opciones para registrar template
53
- */
54
- export interface VanillaTemplateOptions {
55
- /** Datos para el template */
56
- data?: Record<string, any>;
57
- /** Scripts a ejecutar */
58
- scripts?: Array<(container: HTMLElement, data: any) => void>;
59
- /** Estilos CSS */
60
- styles?: string[];
61
- /** Callback después de montar */
62
- onMount?: (container: HTMLElement, data: any) => void;
63
- /** Callback antes de desmontar */
64
- onUnmount?: (container: HTMLElement, data: any) => void;
65
- /** Permitir ejecución standalone */
66
- standalone?: boolean;
67
- /** Selector para modo standalone */
68
- standaloneContainer?: string;
69
- }
70
-
71
- /**
72
- * Configuración de componente reactivo
73
- */
74
- export interface ReactiveComponentConfig {
75
- /** Estado inicial */
76
- state?: Record<string, any>;
77
- /** Función template */
78
- template: (state: any) => string;
79
- /** Acciones que modifican estado */
80
- actions?: Record<string, (state: any, element?: HTMLElement) => any>;
81
- /** Callback en init */
82
- onInit?: (container: HTMLElement, state: any) => void;
83
- /** Callback en destroy */
84
- onDestroy?: (container: HTMLElement, state: any) => void;
85
- }
86
-
87
- /**
88
- * Componente reactivo creado
89
- */
90
- export interface ReactiveComponent {
91
- state: any;
92
- init: (container: HTMLElement) => void;
93
- render: (container: HTMLElement, state?: any) => void;
94
- destroy: (container: HTMLElement) => void;
95
- setState: (newState: Partial<any>) => void;
96
- getState: () => any;
97
- }
98
-
99
- /**
100
- * Helper de eventos Wu
101
- */
102
- export interface WuEventsHelper {
103
- emit: (event: string, data?: any, options?: any) => void;
104
- on: (event: string, callback: (data: any) => void) => () => void;
105
- once: (event: string, callback: (data: any) => void) => () => void;
106
- off: (event: string, callback: (data: any) => void) => void;
107
- cleanup: () => void;
108
- }
109
-
110
- /**
111
- * Helper de store Wu
112
- */
113
- export interface WuStoreHelper {
114
- get: (path?: string) => any;
115
- set: (path: string, value: any) => void;
116
- onChange: (pattern: string, callback: (value: any) => void) => () => void;
117
- }
118
-
119
- /**
120
- * Instancia de WuSlot
121
- */
122
- export interface WuSlotInstance {
123
- container: HTMLElement;
124
- destroy: () => Promise<void>;
125
- }
126
-
127
- export function register(
128
- appName: string,
129
- config: VanillaAppConfig,
130
- options?: VanillaRegisterOptions
131
- ): Promise<boolean>;
132
-
133
- export function registerClass(
134
- appName: string,
135
- AppClass: new (container: HTMLElement, ...args: any[]) => any,
136
- options?: VanillaClassOptions
137
- ): Promise<boolean>;
138
-
139
- export function registerTemplate(
140
- appName: string,
141
- template: string | ((data: any) => string),
142
- options?: VanillaTemplateOptions
143
- ): Promise<boolean>;
144
-
145
- export function createComponent(config: ReactiveComponentConfig): ReactiveComponent;
146
-
147
- export function createWuSlot(
148
- target: HTMLElement,
149
- props: {
150
- name: string;
151
- url: string;
152
- fallbackText?: string;
153
- onLoad?: (data: { name: string; url: string }) => void;
154
- onError?: (error: Error) => void;
155
- }
156
- ): WuSlotInstance;
157
-
158
- export function useWuEvents(): WuEventsHelper;
159
-
160
- export function useWuStore(namespace?: string): WuStoreHelper;
161
-
162
- export function getWuInstance(): WuCore | null;
163
-
164
- export function waitForWu(timeout?: number): Promise<WuCore>;
165
-
166
- export interface WuVanillaAdapter {
167
- register: typeof register;
168
- registerClass: typeof registerClass;
169
- registerTemplate: typeof registerTemplate;
170
- createComponent: typeof createComponent;
171
- createWuSlot: typeof createWuSlot;
172
- useWuEvents: typeof useWuEvents;
173
- useWuStore: typeof useWuStore;
174
- getWuInstance: typeof getWuInstance;
175
- waitForWu: typeof waitForWu;
176
- }
177
-
178
- export const wuVanilla: WuVanillaAdapter;
179
- export default wuVanilla;
1
+ /**
2
+ * 🚀 WU-FRAMEWORK VANILLA JS ADAPTER - TypeScript Declarations
3
+ */
4
+
5
+ import type { WuCore } from '../core/wu-core';
6
+
7
+ /**
8
+ * Configuración de app Vanilla
9
+ */
10
+ export interface VanillaAppConfig {
11
+ /** Función para renderizar */
12
+ render: (container: HTMLElement, state?: any) => void;
13
+ /** Función para limpiar (opcional) */
14
+ destroy?: (container: HTMLElement, state?: any) => void;
15
+ /** Función de inicialización (opcional) */
16
+ init?: (container: HTMLElement, state?: any) => void;
17
+ /** Estado inicial */
18
+ state?: Record<string, any>;
19
+ }
20
+
21
+ /**
22
+ * Opciones de registro Vanilla
23
+ */
24
+ export interface VanillaRegisterOptions {
25
+ /** Callback después de montar */
26
+ onMount?: (container: HTMLElement, state: any) => void;
27
+ /** Callback antes de desmontar */
28
+ onUnmount?: (container: HTMLElement, state: any) => void;
29
+ /** Permitir ejecución standalone */
30
+ standalone?: boolean;
31
+ /** Selector para modo standalone */
32
+ standaloneContainer?: string;
33
+ }
34
+
35
+ /**
36
+ * Opciones para registrar clase
37
+ */
38
+ export interface VanillaClassOptions {
39
+ /** Argumentos para el constructor */
40
+ constructorArgs?: any[];
41
+ /** Callback después de montar */
42
+ onMount?: (container: HTMLElement, instance: any) => void;
43
+ /** Callback antes de desmontar */
44
+ onUnmount?: (container: HTMLElement, instance: any) => void;
45
+ /** Permitir ejecución standalone */
46
+ standalone?: boolean;
47
+ /** Selector para modo standalone */
48
+ standaloneContainer?: string;
49
+ }
50
+
51
+ /**
52
+ * Opciones para registrar template
53
+ */
54
+ export interface VanillaTemplateOptions {
55
+ /** Datos para el template */
56
+ data?: Record<string, any>;
57
+ /** Scripts a ejecutar */
58
+ scripts?: Array<(container: HTMLElement, data: any) => void>;
59
+ /** Estilos CSS */
60
+ styles?: string[];
61
+ /** Callback después de montar */
62
+ onMount?: (container: HTMLElement, data: any) => void;
63
+ /** Callback antes de desmontar */
64
+ onUnmount?: (container: HTMLElement, data: any) => void;
65
+ /** Permitir ejecución standalone */
66
+ standalone?: boolean;
67
+ /** Selector para modo standalone */
68
+ standaloneContainer?: string;
69
+ }
70
+
71
+ /**
72
+ * Configuración de componente reactivo
73
+ */
74
+ export interface ReactiveComponentConfig {
75
+ /** Estado inicial */
76
+ state?: Record<string, any>;
77
+ /** Función template */
78
+ template: (state: any) => string;
79
+ /** Acciones que modifican estado */
80
+ actions?: Record<string, (state: any, element?: HTMLElement) => any>;
81
+ /** Callback en init */
82
+ onInit?: (container: HTMLElement, state: any) => void;
83
+ /** Callback en destroy */
84
+ onDestroy?: (container: HTMLElement, state: any) => void;
85
+ }
86
+
87
+ /**
88
+ * Componente reactivo creado
89
+ */
90
+ export interface ReactiveComponent {
91
+ state: any;
92
+ init: (container: HTMLElement) => void;
93
+ render: (container: HTMLElement, state?: any) => void;
94
+ destroy: (container: HTMLElement) => void;
95
+ setState: (newState: Partial<any>) => void;
96
+ getState: () => any;
97
+ }
98
+
99
+ /**
100
+ * Helper de eventos Wu
101
+ */
102
+ export interface WuEventsHelper {
103
+ emit: (event: string, data?: any, options?: any) => void;
104
+ on: (event: string, callback: (data: any) => void) => () => void;
105
+ once: (event: string, callback: (data: any) => void) => () => void;
106
+ off: (event: string, callback: (data: any) => void) => void;
107
+ cleanup: () => void;
108
+ }
109
+
110
+ /**
111
+ * Helper de store Wu
112
+ */
113
+ export interface WuStoreHelper {
114
+ get: (path?: string) => any;
115
+ set: (path: string, value: any) => void;
116
+ onChange: (pattern: string, callback: (value: any) => void) => () => void;
117
+ }
118
+
119
+ /**
120
+ * Instancia de WuSlot
121
+ */
122
+ export interface WuSlotInstance {
123
+ container: HTMLElement;
124
+ destroy: () => Promise<void>;
125
+ }
126
+
127
+ export function register(
128
+ appName: string,
129
+ config: VanillaAppConfig,
130
+ options?: VanillaRegisterOptions
131
+ ): Promise<boolean>;
132
+
133
+ export function registerClass(
134
+ appName: string,
135
+ AppClass: new (container: HTMLElement, ...args: any[]) => any,
136
+ options?: VanillaClassOptions
137
+ ): Promise<boolean>;
138
+
139
+ export function registerTemplate(
140
+ appName: string,
141
+ template: string | ((data: any) => string),
142
+ options?: VanillaTemplateOptions
143
+ ): Promise<boolean>;
144
+
145
+ export function createComponent(config: ReactiveComponentConfig): ReactiveComponent;
146
+
147
+ export function createWuSlot(
148
+ target: HTMLElement,
149
+ props: {
150
+ name: string;
151
+ url: string;
152
+ fallbackText?: string;
153
+ onLoad?: (data: { name: string; url: string }) => void;
154
+ onError?: (error: Error) => void;
155
+ }
156
+ ): WuSlotInstance;
157
+
158
+ export function useWuEvents(): WuEventsHelper;
159
+
160
+ export function useWuStore(namespace?: string): WuStoreHelper;
161
+
162
+ export function getWuInstance(): WuCore | null;
163
+
164
+ export function waitForWu(timeout?: number): Promise<WuCore>;
165
+
166
+ export interface WuVanillaAdapter {
167
+ register: typeof register;
168
+ registerClass: typeof registerClass;
169
+ registerTemplate: typeof registerTemplate;
170
+ createComponent: typeof createComponent;
171
+ createWuSlot: typeof createWuSlot;
172
+ useWuEvents: typeof useWuEvents;
173
+ useWuStore: typeof useWuStore;
174
+ getWuInstance: typeof getWuInstance;
175
+ waitForWu: typeof waitForWu;
176
+ }
177
+
178
+ export const wuVanilla: WuVanillaAdapter;
179
+ export default wuVanilla;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/adapters/vanilla/ai.js","../../../src/adapters/vanilla/index.js"],"sourcesContent":["/**\r\n * WU-FRAMEWORK VANILLA JS 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 useWuAI(options = {}) {\r\n const { namespace = 'default' } = options;\r\n const state = { messages: [], isStreaming: false, error: null };\r\n return {\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 getMessages() { return [...state.messages]; },\r\n getError() { return state.error; },\r\n isStreaming() { return state.isStreaming; },\r\n };\r\n}\r\n","/**\r\n * 🚀 WU-FRAMEWORK VANILLA JS ADAPTER\r\n *\r\n * El adapter más simple - Para JavaScript puro sin frameworks.\r\n * Ideal para microfrontends ligeros o legacy code.\r\n *\r\n * @example\r\n * // Microfrontend (main.js)\r\n * import { wuVanilla } from 'wu-framework/adapters/vanilla';\r\n *\r\n * wuVanilla.register('my-app', {\r\n * render: (container) => {\r\n * container.innerHTML = '<h1>Hello World</h1>';\r\n * }\r\n * });\r\n *\r\n * @example\r\n * // Con clase\r\n * class MyApp {\r\n * constructor(container) {\r\n * this.container = container;\r\n * }\r\n * render() {\r\n * this.container.innerHTML = '<h1>My App</h1>';\r\n * }\r\n * destroy() {\r\n * this.container.innerHTML = '';\r\n * }\r\n * }\r\n *\r\n * wuVanilla.registerClass('my-app', MyApp);\r\n */\r\n\r\n// Estado global del adapter\r\nconst adapterState = {\r\n apps: new Map(),\r\n instances: new Map()\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 una app Vanilla JS como microfrontend\r\n *\r\n * @param {string} appName - Nombre único del microfrontend\r\n * @param {Object} config - Configuración de la app\r\n * @param {Function} config.render - Función para renderizar (recibe container)\r\n * @param {Function} [config.destroy] - Función para limpiar (recibe container)\r\n * @param {Function} [config.init] - Función de inicialización (recibe container)\r\n * @param {Object} [config.state] - Estado inicial\r\n * @param {Object} options - Opciones adicionales\r\n *\r\n * @example\r\n * wuVanilla.register('counter', {\r\n * state: { count: 0 },\r\n * init: (container) => {\r\n * console.log('Initializing...');\r\n * },\r\n * render: (container, state) => {\r\n * container.innerHTML = `\r\n * <div>\r\n * <h1>Count: ${state.count}</h1>\r\n * <button id=\"increment\">+</button>\r\n * </div>\r\n * `;\r\n * container.querySelector('#increment').onclick = () => {\r\n * state.count++;\r\n * // Re-render\r\n * };\r\n * },\r\n * destroy: (container) => {\r\n * container.innerHTML = '';\r\n * }\r\n * });\r\n */\r\nasync function register(appName, config, options = {}) {\r\n const {\r\n render,\r\n destroy = null,\r\n init = null,\r\n state = {}\r\n } = config;\r\n\r\n const {\r\n onMount = null,\r\n onUnmount = null,\r\n standalone = true,\r\n standaloneContainer = '#app'\r\n } = options;\r\n\r\n if (!render || typeof render !== 'function') {\r\n throw new Error(`[WuVanilla] render function is required for ${appName}`);\r\n }\r\n\r\n // Estado local de la app\r\n const appState = { ...state };\r\n\r\n // Función de mount\r\n const mountApp = (container) => {\r\n if (!container) {\r\n console.error(`[WuVanilla] 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 console.warn(`[WuVanilla] ${appName} already mounted, unmounting first`);\r\n unmountApp();\r\n }\r\n\r\n try {\r\n // Limpiar container\r\n container.innerHTML = '';\r\n\r\n // Ejecutar init si existe\r\n if (init && typeof init === 'function') {\r\n init(container, appState);\r\n }\r\n\r\n // Renderizar\r\n render(container, appState);\r\n\r\n // Guardar referencia\r\n adapterState.apps.set(appName, {\r\n container,\r\n config,\r\n state: appState\r\n });\r\n\r\n console.log(`[WuVanilla] ✅ ${appName} mounted successfully`);\r\n\r\n if (onMount) {\r\n onMount(container, appState);\r\n }\r\n } catch (error) {\r\n console.error(`[WuVanilla] Mount error for ${appName}:`, error);\r\n throw error;\r\n }\r\n };\r\n\r\n // Función de unmount\r\n const unmountApp = (container) => {\r\n const appData = adapterState.apps.get(appName);\r\n\r\n if (appData) {\r\n try {\r\n if (onUnmount) {\r\n onUnmount(appData.container, appData.state);\r\n }\r\n\r\n // Ejecutar destroy si existe\r\n if (destroy && typeof destroy === 'function') {\r\n destroy(appData.container, appData.state);\r\n } else {\r\n // Cleanup por defecto\r\n appData.container.innerHTML = '';\r\n }\r\n\r\n adapterState.apps.delete(appName);\r\n\r\n console.log(`[WuVanilla] ✅ ${appName} unmounted successfully`);\r\n } catch (error) {\r\n console.error(`[WuVanilla] Unmount error for ${appName}:`, error);\r\n }\r\n }\r\n\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 console.log(`[WuVanilla] ✅ ${appName} registered with Wu Framework`);\r\n return true;\r\n\r\n } catch (error) {\r\n console.warn(`[WuVanilla] Wu Framework not available for ${appName}`);\r\n\r\n if (standalone) {\r\n const containerElement = document.querySelector(standaloneContainer);\r\n\r\n if (containerElement) {\r\n console.log(`[WuVanilla] Running ${appName} in standalone mode`);\r\n mountApp(containerElement);\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Registra una clase como microfrontend\r\n *\r\n * @param {string} appName - Nombre único del microfrontend\r\n * @param {Function} AppClass - Clase con constructor(container) y métodos render/destroy\r\n * @param {Object} options - Opciones adicionales\r\n *\r\n * @example\r\n * class TodoApp {\r\n * constructor(container) {\r\n * this.container = container;\r\n * this.todos = [];\r\n * }\r\n *\r\n * render() {\r\n * this.container.innerHTML = `\r\n * <ul>${this.todos.map(t => `<li>${t}</li>`).join('')}</ul>\r\n * `;\r\n * }\r\n *\r\n * addTodo(text) {\r\n * this.todos.push(text);\r\n * this.render();\r\n * }\r\n *\r\n * destroy() {\r\n * this.container.innerHTML = '';\r\n * this.todos = [];\r\n * }\r\n * }\r\n *\r\n * wuVanilla.registerClass('todo-app', TodoApp);\r\n */\r\nasync function registerClass(appName, AppClass, options = {}) {\r\n const {\r\n constructorArgs = [],\r\n onMount = null,\r\n onUnmount = null,\r\n standalone = true,\r\n standaloneContainer = '#app'\r\n } = options;\r\n\r\n // Función de mount\r\n const mountApp = (container) => {\r\n if (!container) {\r\n console.error(`[WuVanilla] Mount failed for ${appName}: container is null`);\r\n return;\r\n }\r\n\r\n // Evitar doble mount\r\n if (adapterState.instances.has(appName)) {\r\n console.warn(`[WuVanilla] ${appName} already mounted, unmounting first`);\r\n unmountApp();\r\n }\r\n\r\n try {\r\n container.innerHTML = '';\r\n\r\n // Crear instancia de la clase\r\n const instance = new AppClass(container, ...constructorArgs);\r\n\r\n // Llamar render si existe\r\n if (instance.render && typeof instance.render === 'function') {\r\n instance.render();\r\n }\r\n\r\n // Guardar instancia\r\n adapterState.instances.set(appName, {\r\n instance,\r\n container\r\n });\r\n\r\n console.log(`[WuVanilla] ✅ ${appName} (class) mounted successfully`);\r\n\r\n if (onMount) {\r\n onMount(container, instance);\r\n }\r\n } catch (error) {\r\n console.error(`[WuVanilla] Mount error for ${appName}:`, error);\r\n throw error;\r\n }\r\n };\r\n\r\n // Función de unmount\r\n const unmountApp = (container) => {\r\n const appData = adapterState.instances.get(appName);\r\n\r\n if (appData) {\r\n try {\r\n if (onUnmount) {\r\n onUnmount(appData.container, appData.instance);\r\n }\r\n\r\n // Llamar destroy si existe\r\n if (appData.instance.destroy && typeof appData.instance.destroy === 'function') {\r\n appData.instance.destroy();\r\n } else {\r\n appData.container.innerHTML = '';\r\n }\r\n\r\n adapterState.instances.delete(appName);\r\n\r\n console.log(`[WuVanilla] ✅ ${appName} (class) unmounted successfully`);\r\n } catch (error) {\r\n console.error(`[WuVanilla] Unmount error for ${appName}:`, error);\r\n }\r\n }\r\n\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 console.log(`[WuVanilla] ✅ ${appName} (class) registered with Wu Framework`);\r\n return true;\r\n\r\n } catch (error) {\r\n console.warn(`[WuVanilla] Wu Framework not available for ${appName}`);\r\n\r\n if (standalone) {\r\n const containerElement = document.querySelector(standaloneContainer);\r\n\r\n if (containerElement) {\r\n console.log(`[WuVanilla] Running ${appName} in standalone mode`);\r\n mountApp(containerElement);\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Registra un template HTML como microfrontend\r\n *\r\n * @param {string} appName - Nombre único del microfrontend\r\n * @param {string|Function} template - HTML string o función que retorna HTML\r\n * @param {Object} options - Opciones adicionales\r\n *\r\n * @example\r\n * // Template estático\r\n * wuVanilla.registerTemplate('header', '<header><h1>My Header</h1></header>');\r\n *\r\n * // Template dinámico\r\n * wuVanilla.registerTemplate('greeting', (data) => `<h1>Hello ${data.name}!</h1>`, {\r\n * data: { name: 'World' }\r\n * });\r\n */\r\nasync function registerTemplate(appName, template, options = {}) {\r\n const {\r\n data = {},\r\n scripts = [],\r\n styles = [],\r\n onMount = null,\r\n onUnmount = null,\r\n standalone = true,\r\n standaloneContainer = '#app'\r\n } = options;\r\n\r\n const mountApp = (container) => {\r\n if (!container) {\r\n console.error(`[WuVanilla] Mount failed for ${appName}: container is null`);\r\n return;\r\n }\r\n\r\n try {\r\n container.innerHTML = '';\r\n\r\n // Inyectar estilos\r\n if (styles.length > 0) {\r\n const styleEl = document.createElement('style');\r\n styleEl.textContent = styles.join('\\n');\r\n styleEl.setAttribute('data-wu-app', appName);\r\n container.appendChild(styleEl);\r\n }\r\n\r\n // Crear wrapper\r\n const wrapper = document.createElement('div');\r\n wrapper.setAttribute('data-wu-template', appName);\r\n\r\n // Renderizar template\r\n if (typeof template === 'function') {\r\n wrapper.innerHTML = template(data);\r\n } else {\r\n wrapper.innerHTML = template;\r\n }\r\n\r\n container.appendChild(wrapper);\r\n\r\n // Ejecutar scripts\r\n scripts.forEach(scriptFn => {\r\n if (typeof scriptFn === 'function') {\r\n scriptFn(container, data);\r\n }\r\n });\r\n\r\n adapterState.apps.set(appName, { container, template, data });\r\n\r\n console.log(`[WuVanilla] ✅ ${appName} (template) mounted successfully`);\r\n\r\n if (onMount) {\r\n onMount(container, data);\r\n }\r\n } catch (error) {\r\n console.error(`[WuVanilla] Mount error for ${appName}:`, error);\r\n throw error;\r\n }\r\n };\r\n\r\n const unmountApp = (container) => {\r\n const appData = adapterState.apps.get(appName);\r\n\r\n if (appData) {\r\n if (onUnmount) {\r\n onUnmount(appData.container, appData.data);\r\n }\r\n\r\n appData.container.innerHTML = '';\r\n adapterState.apps.delete(appName);\r\n\r\n console.log(`[WuVanilla] ✅ ${appName} (template) unmounted successfully`);\r\n }\r\n\r\n if (container) {\r\n container.innerHTML = '';\r\n }\r\n };\r\n\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 console.log(`[WuVanilla] ✅ ${appName} (template) registered with Wu Framework`);\r\n return true;\r\n\r\n } catch (error) {\r\n console.warn(`[WuVanilla] Wu Framework not available for ${appName}`);\r\n\r\n if (standalone) {\r\n const containerElement = document.querySelector(standaloneContainer);\r\n if (containerElement) {\r\n console.log(`[WuVanilla] Running ${appName} in standalone mode`);\r\n mountApp(containerElement);\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Helper para crear un componente reactivo simple\r\n *\r\n * @param {Object} config - Configuración del componente\r\n * @returns {Object} Componente con métodos de estado\r\n *\r\n * @example\r\n * const Counter = wuVanilla.createComponent({\r\n * state: { count: 0 },\r\n * template: (state) => `\r\n * <div>\r\n * <h1>Count: ${state.count}</h1>\r\n * <button data-action=\"increment\">+</button>\r\n * <button data-action=\"decrement\">-</button>\r\n * </div>\r\n * `,\r\n * actions: {\r\n * increment: (state) => ({ count: state.count + 1 }),\r\n * decrement: (state) => ({ count: state.count - 1 })\r\n * }\r\n * });\r\n *\r\n * wuVanilla.register('counter', Counter);\r\n */\r\nfunction createComponent(config) {\r\n const { state: initialState = {}, template, actions = {}, onInit, onDestroy } = config;\r\n\r\n let currentState = { ...initialState };\r\n let container = null;\r\n let mounted = false;\r\n\r\n const setState = (newState) => {\r\n currentState = { ...currentState, ...newState };\r\n if (mounted && container) {\r\n render(container, currentState);\r\n }\r\n };\r\n\r\n const render = (cont, state) => {\r\n const html = template(state);\r\n\r\n // Preservar focus si es posible\r\n const activeId = document.activeElement?.id;\r\n\r\n cont.innerHTML = html;\r\n\r\n // Restaurar focus\r\n if (activeId) {\r\n const el = cont.querySelector(`#${activeId}`);\r\n if (el) el.focus();\r\n }\r\n\r\n // Bind actions\r\n cont.querySelectorAll('[data-action]').forEach(el => {\r\n const actionName = el.getAttribute('data-action');\r\n if (actions[actionName]) {\r\n el.addEventListener('click', () => {\r\n const result = actions[actionName](currentState, el);\r\n if (result) {\r\n setState(result);\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n return {\r\n state: currentState,\r\n\r\n init: (cont) => {\r\n container = cont;\r\n if (onInit) onInit(cont, currentState);\r\n },\r\n\r\n render: (cont, state) => {\r\n container = cont;\r\n currentState = state || currentState;\r\n mounted = true;\r\n render(cont, currentState);\r\n },\r\n\r\n destroy: (cont) => {\r\n if (onDestroy) onDestroy(cont, currentState);\r\n mounted = false;\r\n container = null;\r\n cont.innerHTML = '';\r\n },\r\n\r\n // Exponer setState para uso externo\r\n setState,\r\n getState: () => currentState\r\n };\r\n}\r\n\r\n/**\r\n * Helper para usar eventos de Wu Framework\r\n */\r\nfunction useWuEvents() {\r\n const subscriptions = [];\r\n\r\n return {\r\n emit: (event, data, options) => {\r\n const wu = getWuInstance();\r\n if (wu?.eventBus) {\r\n wu.eventBus.emit(event, data, options);\r\n }\r\n },\r\n\r\n 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 return () => {};\r\n },\r\n\r\n 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 return () => {};\r\n },\r\n\r\n 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: () => {\r\n subscriptions.forEach(unsub => unsub());\r\n subscriptions.length = 0;\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Helper para usar el Store de Wu Framework\r\n */\r\nfunction useWuStore(namespace = '') {\r\n return {\r\n get: (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 set: (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 onChange: (pattern, callback) => {\r\n const wu = getWuInstance();\r\n if (wu?.store) {\r\n const fullPattern = namespace ? `${namespace}.${pattern}` : pattern;\r\n return wu.store.on(fullPattern, callback);\r\n }\r\n return () => {};\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Crea un WuSlot en JavaScript puro\r\n */\r\nfunction createWuSlot(target, props) {\r\n const { name, url, fallbackText = null, onLoad = null, onError = null } = props;\r\n\r\n const container = document.createElement('div');\r\n container.className = 'wu-slot';\r\n container.style.cssText = 'min-height: 100px; position: relative;';\r\n container.setAttribute('data-wu-app', name);\r\n container.setAttribute('data-wu-url', url);\r\n\r\n // Loading state\r\n container.innerHTML = `\r\n <div style=\"display: flex; align-items: center; justify-content: center; padding: 2rem; color: #666;\">\r\n ${fallbackText || `Loading ${name}...`}\r\n </div>\r\n `;\r\n\r\n target.appendChild(container);\r\n\r\n let appInstance = null;\r\n\r\n const mount = async () => {\r\n try {\r\n const wu = getWuInstance();\r\n if (!wu) throw new Error('Wu Framework not initialized');\r\n\r\n const containerId = `wu-slot-${name}-${Date.now()}`;\r\n const innerContainer = document.createElement('div');\r\n innerContainer.id = containerId;\r\n innerContainer.style.cssText = 'width: 100%; height: 100%;';\r\n\r\n container.innerHTML = '';\r\n container.appendChild(innerContainer);\r\n\r\n const app = wu.app(name, {\r\n url,\r\n container: `#${containerId}`,\r\n autoInit: true\r\n });\r\n\r\n appInstance = app;\r\n await app.mount();\r\n\r\n if (onLoad) onLoad({ name, url });\r\n\r\n } catch (err) {\r\n container.innerHTML = `\r\n <div 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;\">${err.message}</p>\r\n </div>\r\n `;\r\n if (onError) onError(err);\r\n }\r\n };\r\n\r\n const destroy = async () => {\r\n if (appInstance) {\r\n try {\r\n await appInstance.unmount();\r\n } catch (e) {}\r\n appInstance = null;\r\n }\r\n container.remove();\r\n };\r\n\r\n mount();\r\n\r\n return { container, destroy };\r\n}\r\n\r\n// ============================================\r\n// AI INTEGRATION\r\n// ============================================\r\nimport { useWuAI } from './ai.js';\r\n\r\n// API pública del adapter\r\nexport const wuVanilla = {\r\n register,\r\n registerClass,\r\n registerTemplate,\r\n createComponent,\r\n createWuSlot,\r\n useWuEvents,\r\n useWuStore,\r\n useWuAI,\r\n getWuInstance,\r\n waitForWu\r\n};\r\n\r\nexport {\r\n register,\r\n registerClass,\r\n registerTemplate,\r\n createComponent,\r\n createWuSlot,\r\n useWuEvents,\r\n useWuStore,\r\n useWuAI,\r\n getWuInstance,\r\n waitForWu\r\n};\r\n\r\nexport default wuVanilla;\r\n"],"names":["useWuAI","options","namespace","state","messages","isStreaming","error","send","text","trim","wu","window","parent","top","ai","push","id","Date","now","role","content","timestamp","res","err","message","clear","length","getMessages","getError","adapterState","apps","Map","instances","getWuInstance","waitForWu","timeout","Promise","resolve","reject","startTime","handleWuReady","cleanup","addEventListener","checkInterval","setInterval","Error","clearInterval","removeEventListener","async","register","appName","config","render","destroy","init","onMount","onUnmount","standalone","standaloneContainer","appState","mountApp","container","has","console","warn","unmountApp","innerHTML","set","log","appData","get","delete","define","mount","unmount","containerElement","document","querySelector","registerClass","AppClass","constructorArgs","instance","registerTemplate","template","data","scripts","styles","styleEl","createElement","textContent","join","setAttribute","appendChild","wrapper","forEach","scriptFn","createComponent","initialState","actions","onInit","onDestroy","currentState","mounted","setState","newState","cont","html","activeId","activeElement","el","focus","querySelectorAll","actionName","getAttribute","result","getState","useWuEvents","subscriptions","emit","event","eventBus","on","callback","unsubscribe","once","off","unsub","useWuStore","path","store","fullPath","value","onChange","pattern","fullPattern","createWuSlot","target","props","name","url","fallbackText","onLoad","onError","className","style","cssText","appInstance","containerId","innerContainer","app","autoInit","e","remove","wuVanilla"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/adapters/vanilla/ai.js","../../../src/adapters/vanilla/index.js"],"sourcesContent":["/**\n * WU-FRAMEWORK VANILLA JS 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 useWuAI(options = {}) {\n const { namespace = 'default' } = options;\n const state = { messages: [], isStreaming: false, error: null };\n return {\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 getMessages() { return [...state.messages]; },\n getError() { return state.error; },\n isStreaming() { return state.isStreaming; },\n };\n}\n","/**\n * 🚀 WU-FRAMEWORK VANILLA JS ADAPTER\n *\n * El adapter más simple - Para JavaScript puro sin frameworks.\n * Ideal para microfrontends ligeros o legacy code.\n *\n * @example\n * // Microfrontend (main.js)\n * import { wuVanilla } from 'wu-framework/adapters/vanilla';\n *\n * wuVanilla.register('my-app', {\n * render: (container) => {\n * container.innerHTML = '<h1>Hello World</h1>';\n * }\n * });\n *\n * @example\n * // Con clase\n * class MyApp {\n * constructor(container) {\n * this.container = container;\n * }\n * render() {\n * this.container.innerHTML = '<h1>My App</h1>';\n * }\n * destroy() {\n * this.container.innerHTML = '';\n * }\n * }\n *\n * wuVanilla.registerClass('my-app', MyApp);\n */\n\n// Estado global del adapter\nconst adapterState = {\n apps: new Map(),\n instances: new Map()\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 una app Vanilla JS como microfrontend\n *\n * @param {string} appName - Nombre único del microfrontend\n * @param {Object} config - Configuración de la app\n * @param {Function} config.render - Función para renderizar (recibe container)\n * @param {Function} [config.destroy] - Función para limpiar (recibe container)\n * @param {Function} [config.init] - Función de inicialización (recibe container)\n * @param {Object} [config.state] - Estado inicial\n * @param {Object} options - Opciones adicionales\n *\n * @example\n * wuVanilla.register('counter', {\n * state: { count: 0 },\n * init: (container) => {\n * console.log('Initializing...');\n * },\n * render: (container, state) => {\n * container.innerHTML = `\n * <div>\n * <h1>Count: ${state.count}</h1>\n * <button id=\"increment\">+</button>\n * </div>\n * `;\n * container.querySelector('#increment').onclick = () => {\n * state.count++;\n * // Re-render\n * };\n * },\n * destroy: (container) => {\n * container.innerHTML = '';\n * }\n * });\n */\nasync function register(appName, config, options = {}) {\n const {\n render,\n destroy = null,\n init = null,\n state = {}\n } = config;\n\n const {\n onMount = null,\n onUnmount = null,\n standalone = true,\n standaloneContainer = '#app'\n } = options;\n\n if (!render || typeof render !== 'function') {\n throw new Error(`[WuVanilla] render function is required for ${appName}`);\n }\n\n // Estado local de la app\n const appState = { ...state };\n\n // Función de mount\n const mountApp = (container) => {\n if (!container) {\n console.error(`[WuVanilla] Mount failed for ${appName}: container is null`);\n return;\n }\n\n // Evitar doble mount\n if (adapterState.apps.has(appName)) {\n console.warn(`[WuVanilla] ${appName} already mounted, unmounting first`);\n unmountApp();\n }\n\n try {\n // Limpiar container\n container.innerHTML = '';\n\n // Ejecutar init si existe\n if (init && typeof init === 'function') {\n init(container, appState);\n }\n\n // Renderizar\n render(container, appState);\n\n // Guardar referencia\n adapterState.apps.set(appName, {\n container,\n config,\n state: appState\n });\n\n console.log(`[WuVanilla] ✅ ${appName} mounted successfully`);\n\n if (onMount) {\n onMount(container, appState);\n }\n } catch (error) {\n console.error(`[WuVanilla] Mount error for ${appName}:`, error);\n throw error;\n }\n };\n\n // Función de unmount\n const unmountApp = (container) => {\n const appData = adapterState.apps.get(appName);\n\n if (appData) {\n try {\n if (onUnmount) {\n onUnmount(appData.container, appData.state);\n }\n\n // Ejecutar destroy si existe\n if (destroy && typeof destroy === 'function') {\n destroy(appData.container, appData.state);\n } else {\n // Cleanup por defecto\n appData.container.innerHTML = '';\n }\n\n adapterState.apps.delete(appName);\n\n console.log(`[WuVanilla] ✅ ${appName} unmounted successfully`);\n } catch (error) {\n console.error(`[WuVanilla] Unmount error for ${appName}:`, error);\n }\n }\n\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 console.log(`[WuVanilla] ✅ ${appName} registered with Wu Framework`);\n return true;\n\n } catch (error) {\n console.warn(`[WuVanilla] Wu Framework not available for ${appName}`);\n\n if (standalone) {\n const containerElement = document.querySelector(standaloneContainer);\n\n if (containerElement) {\n console.log(`[WuVanilla] Running ${appName} in standalone mode`);\n mountApp(containerElement);\n return true;\n }\n }\n\n return false;\n }\n}\n\n/**\n * Registra una clase como microfrontend\n *\n * @param {string} appName - Nombre único del microfrontend\n * @param {Function} AppClass - Clase con constructor(container) y métodos render/destroy\n * @param {Object} options - Opciones adicionales\n *\n * @example\n * class TodoApp {\n * constructor(container) {\n * this.container = container;\n * this.todos = [];\n * }\n *\n * render() {\n * this.container.innerHTML = `\n * <ul>${this.todos.map(t => `<li>${t}</li>`).join('')}</ul>\n * `;\n * }\n *\n * addTodo(text) {\n * this.todos.push(text);\n * this.render();\n * }\n *\n * destroy() {\n * this.container.innerHTML = '';\n * this.todos = [];\n * }\n * }\n *\n * wuVanilla.registerClass('todo-app', TodoApp);\n */\nasync function registerClass(appName, AppClass, options = {}) {\n const {\n constructorArgs = [],\n onMount = null,\n onUnmount = null,\n standalone = true,\n standaloneContainer = '#app'\n } = options;\n\n // Función de mount\n const mountApp = (container) => {\n if (!container) {\n console.error(`[WuVanilla] Mount failed for ${appName}: container is null`);\n return;\n }\n\n // Evitar doble mount\n if (adapterState.instances.has(appName)) {\n console.warn(`[WuVanilla] ${appName} already mounted, unmounting first`);\n unmountApp();\n }\n\n try {\n container.innerHTML = '';\n\n // Crear instancia de la clase\n const instance = new AppClass(container, ...constructorArgs);\n\n // Llamar render si existe\n if (instance.render && typeof instance.render === 'function') {\n instance.render();\n }\n\n // Guardar instancia\n adapterState.instances.set(appName, {\n instance,\n container\n });\n\n console.log(`[WuVanilla] ✅ ${appName} (class) mounted successfully`);\n\n if (onMount) {\n onMount(container, instance);\n }\n } catch (error) {\n console.error(`[WuVanilla] Mount error for ${appName}:`, error);\n throw error;\n }\n };\n\n // Función de unmount\n const unmountApp = (container) => {\n const appData = adapterState.instances.get(appName);\n\n if (appData) {\n try {\n if (onUnmount) {\n onUnmount(appData.container, appData.instance);\n }\n\n // Llamar destroy si existe\n if (appData.instance.destroy && typeof appData.instance.destroy === 'function') {\n appData.instance.destroy();\n } else {\n appData.container.innerHTML = '';\n }\n\n adapterState.instances.delete(appName);\n\n console.log(`[WuVanilla] ✅ ${appName} (class) unmounted successfully`);\n } catch (error) {\n console.error(`[WuVanilla] Unmount error for ${appName}:`, error);\n }\n }\n\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 console.log(`[WuVanilla] ✅ ${appName} (class) registered with Wu Framework`);\n return true;\n\n } catch (error) {\n console.warn(`[WuVanilla] Wu Framework not available for ${appName}`);\n\n if (standalone) {\n const containerElement = document.querySelector(standaloneContainer);\n\n if (containerElement) {\n console.log(`[WuVanilla] Running ${appName} in standalone mode`);\n mountApp(containerElement);\n return true;\n }\n }\n\n return false;\n }\n}\n\n/**\n * Registra un template HTML como microfrontend\n *\n * @param {string} appName - Nombre único del microfrontend\n * @param {string|Function} template - HTML string o función que retorna HTML\n * @param {Object} options - Opciones adicionales\n *\n * @example\n * // Template estático\n * wuVanilla.registerTemplate('header', '<header><h1>My Header</h1></header>');\n *\n * // Template dinámico\n * wuVanilla.registerTemplate('greeting', (data) => `<h1>Hello ${data.name}!</h1>`, {\n * data: { name: 'World' }\n * });\n */\nasync function registerTemplate(appName, template, options = {}) {\n const {\n data = {},\n scripts = [],\n styles = [],\n onMount = null,\n onUnmount = null,\n standalone = true,\n standaloneContainer = '#app'\n } = options;\n\n const mountApp = (container) => {\n if (!container) {\n console.error(`[WuVanilla] Mount failed for ${appName}: container is null`);\n return;\n }\n\n try {\n container.innerHTML = '';\n\n // Inyectar estilos\n if (styles.length > 0) {\n const styleEl = document.createElement('style');\n styleEl.textContent = styles.join('\\n');\n styleEl.setAttribute('data-wu-app', appName);\n container.appendChild(styleEl);\n }\n\n // Crear wrapper\n const wrapper = document.createElement('div');\n wrapper.setAttribute('data-wu-template', appName);\n\n // Renderizar template\n if (typeof template === 'function') {\n wrapper.innerHTML = template(data);\n } else {\n wrapper.innerHTML = template;\n }\n\n container.appendChild(wrapper);\n\n // Ejecutar scripts\n scripts.forEach(scriptFn => {\n if (typeof scriptFn === 'function') {\n scriptFn(container, data);\n }\n });\n\n adapterState.apps.set(appName, { container, template, data });\n\n console.log(`[WuVanilla] ✅ ${appName} (template) mounted successfully`);\n\n if (onMount) {\n onMount(container, data);\n }\n } catch (error) {\n console.error(`[WuVanilla] Mount error for ${appName}:`, error);\n throw error;\n }\n };\n\n const unmountApp = (container) => {\n const appData = adapterState.apps.get(appName);\n\n if (appData) {\n if (onUnmount) {\n onUnmount(appData.container, appData.data);\n }\n\n appData.container.innerHTML = '';\n adapterState.apps.delete(appName);\n\n console.log(`[WuVanilla] ✅ ${appName} (template) unmounted successfully`);\n }\n\n if (container) {\n container.innerHTML = '';\n }\n };\n\n try {\n const wu = await waitForWu(3000);\n\n wu.define(appName, {\n mount: mountApp,\n unmount: unmountApp\n });\n\n console.log(`[WuVanilla] ✅ ${appName} (template) registered with Wu Framework`);\n return true;\n\n } catch (error) {\n console.warn(`[WuVanilla] Wu Framework not available for ${appName}`);\n\n if (standalone) {\n const containerElement = document.querySelector(standaloneContainer);\n if (containerElement) {\n console.log(`[WuVanilla] Running ${appName} in standalone mode`);\n mountApp(containerElement);\n return true;\n }\n }\n\n return false;\n }\n}\n\n/**\n * Helper para crear un componente reactivo simple\n *\n * @param {Object} config - Configuración del componente\n * @returns {Object} Componente con métodos de estado\n *\n * @example\n * const Counter = wuVanilla.createComponent({\n * state: { count: 0 },\n * template: (state) => `\n * <div>\n * <h1>Count: ${state.count}</h1>\n * <button data-action=\"increment\">+</button>\n * <button data-action=\"decrement\">-</button>\n * </div>\n * `,\n * actions: {\n * increment: (state) => ({ count: state.count + 1 }),\n * decrement: (state) => ({ count: state.count - 1 })\n * }\n * });\n *\n * wuVanilla.register('counter', Counter);\n */\nfunction createComponent(config) {\n const { state: initialState = {}, template, actions = {}, onInit, onDestroy } = config;\n\n let currentState = { ...initialState };\n let container = null;\n let mounted = false;\n\n const setState = (newState) => {\n currentState = { ...currentState, ...newState };\n if (mounted && container) {\n render(container, currentState);\n }\n };\n\n const render = (cont, state) => {\n const html = template(state);\n\n // Preservar focus si es posible\n const activeId = document.activeElement?.id;\n\n cont.innerHTML = html;\n\n // Restaurar focus\n if (activeId) {\n const el = cont.querySelector(`#${activeId}`);\n if (el) el.focus();\n }\n\n // Bind actions\n cont.querySelectorAll('[data-action]').forEach(el => {\n const actionName = el.getAttribute('data-action');\n if (actions[actionName]) {\n el.addEventListener('click', () => {\n const result = actions[actionName](currentState, el);\n if (result) {\n setState(result);\n }\n });\n }\n });\n };\n\n return {\n state: currentState,\n\n init: (cont) => {\n container = cont;\n if (onInit) onInit(cont, currentState);\n },\n\n render: (cont, state) => {\n container = cont;\n currentState = state || currentState;\n mounted = true;\n render(cont, currentState);\n },\n\n destroy: (cont) => {\n if (onDestroy) onDestroy(cont, currentState);\n mounted = false;\n container = null;\n cont.innerHTML = '';\n },\n\n // Exponer setState para uso externo\n setState,\n getState: () => currentState\n };\n}\n\n/**\n * Helper para usar eventos de Wu Framework\n */\nfunction useWuEvents() {\n const subscriptions = [];\n\n return {\n emit: (event, data, options) => {\n const wu = getWuInstance();\n if (wu?.eventBus) {\n wu.eventBus.emit(event, data, options);\n }\n },\n\n 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 return () => {};\n },\n\n once: (event, callback) => {\n const wu = getWuInstance();\n if (wu?.eventBus) {\n return wu.eventBus.once(event, callback);\n }\n return () => {};\n },\n\n off: (event, callback) => {\n const wu = getWuInstance();\n if (wu?.eventBus) {\n wu.eventBus.off(event, callback);\n }\n },\n\n cleanup: () => {\n subscriptions.forEach(unsub => unsub());\n subscriptions.length = 0;\n }\n };\n}\n\n/**\n * Helper para usar el Store de Wu Framework\n */\nfunction useWuStore(namespace = '') {\n return {\n get: (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 set: (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 onChange: (pattern, callback) => {\n const wu = getWuInstance();\n if (wu?.store) {\n const fullPattern = namespace ? `${namespace}.${pattern}` : pattern;\n return wu.store.on(fullPattern, callback);\n }\n return () => {};\n }\n };\n}\n\n/**\n * Crea un WuSlot en JavaScript puro\n */\nfunction createWuSlot(target, props) {\n const { name, url, fallbackText = null, onLoad = null, onError = null } = props;\n\n const container = document.createElement('div');\n container.className = 'wu-slot';\n container.style.cssText = 'min-height: 100px; position: relative;';\n container.setAttribute('data-wu-app', name);\n container.setAttribute('data-wu-url', url);\n\n // Loading state\n container.innerHTML = `\n <div style=\"display: flex; align-items: center; justify-content: center; padding: 2rem; color: #666;\">\n ${fallbackText || `Loading ${name}...`}\n </div>\n `;\n\n target.appendChild(container);\n\n let appInstance = null;\n\n const mount = async () => {\n try {\n const wu = getWuInstance();\n if (!wu) throw new Error('Wu Framework not initialized');\n\n const containerId = `wu-slot-${name}-${Date.now()}`;\n const innerContainer = document.createElement('div');\n innerContainer.id = containerId;\n innerContainer.style.cssText = 'width: 100%; height: 100%;';\n\n container.innerHTML = '';\n container.appendChild(innerContainer);\n\n const app = wu.app(name, {\n url,\n container: `#${containerId}`,\n autoInit: true\n });\n\n appInstance = app;\n await app.mount();\n\n if (onLoad) onLoad({ name, url });\n\n } catch (err) {\n container.innerHTML = `\n <div 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;\">${err.message}</p>\n </div>\n `;\n if (onError) onError(err);\n }\n };\n\n const destroy = async () => {\n if (appInstance) {\n try {\n await appInstance.unmount();\n } catch (e) {}\n appInstance = null;\n }\n container.remove();\n };\n\n mount();\n\n return { container, destroy };\n}\n\n// ============================================\n// AI INTEGRATION\n// ============================================\nimport { useWuAI } from './ai.js';\n\n// API pública del adapter\nexport const wuVanilla = {\n register,\n registerClass,\n registerTemplate,\n createComponent,\n createWuSlot,\n useWuEvents,\n useWuStore,\n useWuAI,\n getWuInstance,\n waitForWu\n};\n\nexport {\n register,\n registerClass,\n registerTemplate,\n createComponent,\n createWuSlot,\n useWuEvents,\n useWuStore,\n useWuAI,\n getWuInstance,\n waitForWu\n};\n\nexport default wuVanilla;\n"],"names":["useWuAI","options","namespace","state","messages","isStreaming","error","send","text","trim","wu","window","parent","top","ai","push","id","Date","now","role","content","timestamp","res","err","message","clear","length","getMessages","getError","adapterState","apps","Map","instances","getWuInstance","waitForWu","timeout","Promise","resolve","reject","startTime","handleWuReady","cleanup","addEventListener","checkInterval","setInterval","Error","clearInterval","removeEventListener","async","register","appName","config","render","destroy","init","onMount","onUnmount","standalone","standaloneContainer","appState","mountApp","container","has","console","warn","unmountApp","innerHTML","set","log","appData","get","delete","define","mount","unmount","containerElement","document","querySelector","registerClass","AppClass","constructorArgs","instance","registerTemplate","template","data","scripts","styles","styleEl","createElement","textContent","join","setAttribute","appendChild","wrapper","forEach","scriptFn","createComponent","initialState","actions","onInit","onDestroy","currentState","mounted","setState","newState","cont","html","activeId","activeElement","el","focus","querySelectorAll","actionName","getAttribute","result","getState","useWuEvents","subscriptions","emit","event","eventBus","on","callback","unsubscribe","once","off","unsub","useWuStore","path","store","fullPath","value","onChange","pattern","fullPattern","createWuSlot","target","props","name","url","fallbackText","onLoad","onError","className","style","cssText","appInstance","containerId","innerContainer","app","autoInit","e","remove","wuVanilla"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- // Re-export from folder structure — backward compatibility
2
- export * from './vanilla/index';
3
- export { default } from './vanilla/index';
1
+ // Re-export from folder structure — backward compatibility
2
+ export * from './vanilla/index';
3
+ export { default } from './vanilla/index';