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.
- package/LICENSE +39 -39
- package/README.md +570 -570
- package/dist/adapters/angular/index.d.ts +154 -154
- package/dist/adapters/angular/index.js.map +1 -1
- package/dist/adapters/angular.d.ts +3 -3
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/lit/index.d.ts +120 -120
- package/dist/adapters/lit/index.js.map +1 -1
- package/dist/adapters/lit.d.ts +3 -3
- package/dist/adapters/preact/index.d.ts +108 -108
- package/dist/adapters/preact/index.js.map +1 -1
- package/dist/adapters/preact.d.ts +3 -3
- package/dist/adapters/qwik/index.js +1 -1
- package/dist/adapters/qwik/index.js.map +1 -1
- package/dist/adapters/react/index.d.ts +246 -246
- package/dist/adapters/react/index.js.map +1 -1
- package/dist/adapters/react.d.ts +3 -3
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/solid/index.d.ts +101 -101
- package/dist/adapters/solid/index.js.map +1 -1
- package/dist/adapters/solid.d.ts +3 -3
- package/dist/adapters/svelte/index.d.ts +166 -166
- package/dist/adapters/svelte/index.js.map +1 -1
- package/dist/adapters/svelte.d.ts +3 -3
- package/dist/adapters/vanilla/index.d.ts +179 -179
- package/dist/adapters/vanilla/index.js.map +1 -1
- package/dist/adapters/vanilla.d.ts +3 -3
- package/dist/adapters/vue/index.d.ts +299 -299
- package/dist/adapters/vue/index.js.map +1 -1
- package/dist/adapters/vue.d.ts +3 -3
- package/dist/ai/wu-ai.js.map +1 -1
- package/dist/core/wu-html-parser.js +2 -0
- package/dist/core/wu-html-parser.js.map +1 -0
- package/dist/core/wu-iframe-sandbox.js +2 -0
- package/dist/core/wu-iframe-sandbox.js.map +1 -0
- package/dist/core/wu-loader.js +2 -0
- package/dist/core/wu-loader.js.map +1 -0
- package/dist/core/wu-mcp-bridge.js.map +1 -1
- package/dist/core/wu-script-executor.js +2 -0
- package/dist/core/wu-script-executor.js.map +1 -0
- package/dist/wu-ai-browser-primitives-BDKXJlwc.js.map +1 -1
- package/dist/wu-framework.cjs.js +2 -2
- package/dist/wu-framework.cjs.js.map +1 -1
- package/dist/wu-framework.dev.js +8697 -9142
- package/dist/wu-framework.dev.js.map +1 -1
- package/dist/wu-framework.esm.js +2 -2
- package/dist/wu-framework.esm.js.map +1 -1
- package/dist/wu-framework.umd.js +2 -2
- package/dist/wu-framework.umd.js.map +1 -1
- package/dist/wu-logger-fJfUHBGA.js.map +1 -1
- package/integrations/astro/README.md +127 -127
- package/integrations/astro/WuApp.astro +63 -63
- package/integrations/astro/WuShell.astro +39 -39
- package/integrations/astro/index.js +68 -68
- package/integrations/astro/package.json +38 -38
- package/integrations/astro/types.d.ts +53 -53
- package/package.json +218 -218
- package/dist/wu-html-parser.js +0 -2
- package/dist/wu-html-parser.js.map +0 -1
- package/dist/wu-iframe-sandbox.js +0 -2
- package/dist/wu-iframe-sandbox.js.map +0 -1
- package/dist/wu-script-executor.js +0 -2
- 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":"AAQO,SAASA,EAAQC,EAAU,IAChC,MAAMC,UAAEA,EAAY,WAAcD,EAC5BE,EAAQ,CAAEC,SAAU,GAAIC,aAAa,EAAOC,MAAO,MACzD,MAAO,CACL,UAAMC,CAAKC,GACT,IAAKA,GAAMC,OAAQ,OAAO,KAC1B,MAAMC,EAVY,oBAAXC,OAA+B,KACnCA,OAAOD,IAAMC,OAAOC,QAAQF,IAAMC,OAAOE,KAAKH,IAAM,KAUvD,IAAKA,GAAII,GAA2C,OAArCX,EAAMG,MAAQ,sBAA8B,KAC3DH,EAAMC,SAASW,KAAK,CAAEC,GAAI,QAAQC,KAAKC,QAASC,KAAM,OAAQC,QAASZ,EAAMa,UAAWJ,KAAKC,QAC7Ff,EAAME,aAAc,EAAMF,EAAMG,MAAQ,KACxC,IACE,MAAMgB,QAAYZ,EAAGI,GAAGP,KAAKC,EAAM,CAAEN,cAEV,OAD3BC,EAAMC,SAASW,KAAK,CAAEC,GAAI,aAAaC,KAAKC,QAASC,KAAM,YAAaC,QAASE,EAAIF,QAASC,UAAWJ,KAAKC,QAC9Gf,EAAME,aAAc,EAAciB,CACpC,CAAE,MAAOC,GAA6D,OAAtDpB,EAAMG,MAAQiB,EAAIC,QAASrB,EAAME,aAAc,EAAc,IAAM,CACrF,EACA,KAAAoB,GAAUtB,EAAMC,SAASsB,OAAS,EAAGvB,EAAMG,MAAQ,IAAM,EACzDqB,YAAW,IAAY,IAAIxB,EAAMC,UACjCwB,SAAQ,IAAYzB,EAAMG,MAC1BD,YAAW,IAAYF,EAAME,YAEjC,CCKA,MAAMwB,EAAe,CACnBC,KAAM,IAAIC,IACVC,UAAW,IAAID,KAMjB,SAASE,IACP,MAAsB,oBAAXtB,OAA+B,KAEnCA,OAAOD,IACTC,OAAOC,QAAQF,IACfC,OAAOE,KAAKH,IACZ,IACP,CAKA,SAASwB,EAAUC,EAAU,KAC3B,OAAO,IAAIC,QAAQ,CAACC,EAASC,KAC3B,MAAM5B,EAAKuB,IACX,GAAIvB,EAEF,YADA2B,EAAQ3B,GAIV,MAAM6B,EAAYtB,KAAKC,MAEjBsB,EAAgB,KACpBC,IACAJ,EAAQJ,MAGVtB,OAAO+B,iBAAiB,WAAYF,GACpC7B,OAAO+B,iBAAiB,eAAgBF,GAExC,MAAMG,EAAgBC,YAAY,KAChC,MAAMlC,EAAKuB,IACX,GAAIvB,EAGF,OAFA+B,SACAJ,EAAQ3B,GAINO,KAAKC,MAAQqB,EAAYJ,IAC3BM,IACAH,EAAO,IAAIO,MAAM,gCAAgCV,UAElD,KAEH,SAASM,IACPK,cAAcH,GACdhC,OAAOoC,oBAAoB,WAAYP,GACvC7B,OAAOoC,oBAAoB,eAAgBP,EAC7C,GAEJ,CAoCAQ,eAAeC,EAASC,EAASC,EAAQlD,EAAU,CAAA,GACjD,MAAMmD,OACJA,EAAMC,QACNA,EAAU,KAAIC,KACdA,EAAO,KAAInD,MACXA,EAAQ,CAAA,GACNgD,GAEEI,QACJA,EAAU,KAAIC,UACdA,EAAY,KAAIC,WAChBA,GAAa,EAAIC,oBACjBA,EAAsB,QACpBzD,EAEJ,IAAKmD,GAA4B,mBAAXA,EACpB,MAAM,IAAIP,MAAM,+CAA+CK,KAIjE,MAAMS,EAAW,IAAKxD,GAGhByD,EAAYC,IAChB,GAAKA,EAAL,CAMIhC,EAAaC,KAAKgC,IAAIZ,KACxBa,QAAQC,KAAK,eAAed,uCAC5Be,KAGF,IAEEJ,EAAUK,UAAY,GAGlBZ,GAAwB,mBAATA,GACjBA,EAAKO,EAAWF,GAIlBP,EAAOS,EAAWF,GAGlB9B,EAAaC,KAAKqC,IAAIjB,EAAS,CAC7BW,YACAV,SACAhD,MAAOwD,IAGTI,QAAQK,IAAI,iBAAiBlB,0BAEzBK,GACFA,EAAQM,EAAWF,EAEvB,CAAE,MAAOrD,GAEP,MADAyD,QAAQzD,MAAM,+BAA+B4C,KAAY5C,GACnDA,CACR,CAnCA,MAFEyD,QAAQzD,MAAM,gCAAgC4C,yBAyC5Ce,EAAcJ,IAClB,MAAMQ,EAAUxC,EAAaC,KAAKwC,IAAIpB,GAEtC,GAAImB,EACF,IACMb,GACFA,EAAUa,EAAQR,UAAWQ,EAAQlE,OAInCkD,GAA8B,mBAAZA,EACpBA,EAAQgB,EAAQR,UAAWQ,EAAQlE,OAGnCkE,EAAQR,UAAUK,UAAY,GAGhCrC,EAAaC,KAAKyC,OAAOrB,GAEzBa,QAAQK,IAAI,iBAAiBlB,2BAC/B,CAAE,MAAO5C,GACPyD,QAAQzD,MAAM,iCAAiC4C,KAAY5C,EAC7D,CAGEuD,IACFA,EAAUK,UAAY,KAK1B,IASE,aARiBhC,EAAU,MAExBsC,OAAOtB,EAAS,CACjBuB,MAAOb,EACPc,QAAST,IAGXF,QAAQK,IAAI,iBAAiBlB,mCACtB,CAET,CAAE,MAAO5C,GAGP,GAFAyD,QAAQC,KAAK,8CAA8Cd,KAEvDO,EAAY,CACd,MAAMkB,EAAmBC,SAASC,cAAcnB,GAEhD,GAAIiB,EAGF,OAFAZ,QAAQK,IAAI,uBAAuBlB,wBACnCU,EAASe,IACF,CAEX,CAEA,OAAO,CACT,CACF,CAmCA3B,eAAe8B,EAAc5B,EAAS6B,EAAU9E,EAAU,CAAA,GACxD,MAAM+E,gBACJA,EAAkB,GAAEzB,QACpBA,EAAU,KAAIC,UACdA,EAAY,KAAIC,WAChBA,GAAa,EAAIC,oBACjBA,EAAsB,QACpBzD,EAGE2D,EAAYC,IAChB,GAAKA,EAAL,CAMIhC,EAAaG,UAAU8B,IAAIZ,KAC7Ba,QAAQC,KAAK,eAAed,uCAC5Be,KAGF,IACEJ,EAAUK,UAAY,GAGtB,MAAMe,EAAW,IAAIF,EAASlB,KAAcmB,GAGxCC,EAAS7B,QAAqC,mBAApB6B,EAAS7B,QACrC6B,EAAS7B,SAIXvB,EAAaG,UAAUmC,IAAIjB,EAAS,CAClC+B,WACApB,cAGFE,QAAQK,IAAI,iBAAiBlB,kCAEzBK,GACFA,EAAQM,EAAWoB,EAEvB,CAAE,MAAO3E,GAEP,MADAyD,QAAQzD,MAAM,+BAA+B4C,KAAY5C,GACnDA,CACR,CAjCA,MAFEyD,QAAQzD,MAAM,gCAAgC4C,yBAuC5Ce,EAAcJ,IAClB,MAAMQ,EAAUxC,EAAaG,UAAUsC,IAAIpB,GAE3C,GAAImB,EACF,IACMb,GACFA,EAAUa,EAAQR,UAAWQ,EAAQY,UAInCZ,EAAQY,SAAS5B,SAA+C,mBAA7BgB,EAAQY,SAAS5B,QACtDgB,EAAQY,SAAS5B,UAEjBgB,EAAQR,UAAUK,UAAY,GAGhCrC,EAAaG,UAAUuC,OAAOrB,GAE9Ba,QAAQK,IAAI,iBAAiBlB,mCAC/B,CAAE,MAAO5C,GACPyD,QAAQzD,MAAM,iCAAiC4C,KAAY5C,EAC7D,CAGEuD,IACFA,EAAUK,UAAY,KAK1B,IASE,aARiBhC,EAAU,MAExBsC,OAAOtB,EAAS,CACjBuB,MAAOb,EACPc,QAAST,IAGXF,QAAQK,IAAI,iBAAiBlB,2CACtB,CAET,CAAE,MAAO5C,GAGP,GAFAyD,QAAQC,KAAK,8CAA8Cd,KAEvDO,EAAY,CACd,MAAMkB,EAAmBC,SAASC,cAAcnB,GAEhD,GAAIiB,EAGF,OAFAZ,QAAQK,IAAI,uBAAuBlB,wBACnCU,EAASe,IACF,CAEX,CAEA,OAAO,CACT,CACF,CAkBA3B,eAAekC,EAAiBhC,EAASiC,EAAUlF,EAAU,CAAA,GAC3D,MAAMmF,KACJA,EAAO,CAAA,EAAEC,QACTA,EAAU,GAAEC,OACZA,EAAS,GAAE/B,QACXA,EAAU,KAAIC,UACdA,EAAY,KAAIC,WAChBA,GAAa,EAAIC,oBACjBA,EAAsB,QACpBzD,EAEE2D,EAAYC,IAChB,GAAKA,EAKL,IAIE,GAHAA,EAAUK,UAAY,GAGlBoB,EAAO5D,OAAS,EAAG,CACrB,MAAM6D,EAAUX,SAASY,cAAc,SACvCD,EAAQE,YAAcH,EAAOI,KAAK,MAClCH,EAAQI,aAAa,cAAezC,GACpCW,EAAU+B,YAAYL,EACxB,CAGA,MAAMM,EAAUjB,SAASY,cAAc,OACvCK,EAAQF,aAAa,mBAAoBzC,GAIvC2C,EAAQ3B,UADc,mBAAbiB,EACWA,EAASC,GAETD,EAGtBtB,EAAU+B,YAAYC,GAGtBR,EAAQS,QAAQC,IACU,mBAAbA,GACTA,EAASlC,EAAWuB,KAIxBvD,EAAaC,KAAKqC,IAAIjB,EAAS,CAAEW,YAAWsB,WAAUC,SAEtDrB,QAAQK,IAAI,iBAAiBlB,qCAEzBK,GACFA,EAAQM,EAAWuB,EAEvB,CAAE,MAAO9E,GAEP,MADAyD,QAAQzD,MAAM,+BAA+B4C,KAAY5C,GACnDA,CACR,MA7CEyD,QAAQzD,MAAM,gCAAgC4C,yBAgD5Ce,EAAcJ,IAClB,MAAMQ,EAAUxC,EAAaC,KAAKwC,IAAIpB,GAElCmB,IACEb,GACFA,EAAUa,EAAQR,UAAWQ,EAAQe,MAGvCf,EAAQR,UAAUK,UAAY,GAC9BrC,EAAaC,KAAKyC,OAAOrB,GAEzBa,QAAQK,IAAI,iBAAiBlB,wCAG3BW,IACFA,EAAUK,UAAY,KAI1B,IASE,aARiBhC,EAAU,MAExBsC,OAAOtB,EAAS,CACjBuB,MAAOb,EACPc,QAAST,IAGXF,QAAQK,IAAI,iBAAiBlB,8CACtB,CAET,CAAE,MAAO5C,GAGP,GAFAyD,QAAQC,KAAK,8CAA8Cd,KAEvDO,EAAY,CACd,MAAMkB,EAAmBC,SAASC,cAAcnB,GAChD,GAAIiB,EAGF,OAFAZ,QAAQK,IAAI,uBAAuBlB,wBACnCU,EAASe,IACF,CAEX,CAEA,OAAO,CACT,CACF,CA0BA,SAASqB,EAAgB7C,GACvB,MAAQhD,MAAO8F,EAAe,CAAA,EAAEd,SAAEA,EAAQe,QAAEA,EAAU,CAAA,EAAEC,OAAEA,EAAMC,UAAEA,GAAcjD,EAEhF,IAAIkD,EAAe,IAAKJ,GACpBpC,EAAY,KACZyC,GAAU,EAEd,MAAMC,EAAYC,IAChBH,EAAe,IAAKA,KAAiBG,GACjCF,GAAWzC,GACbT,EAAOS,EAAWwC,IAIhBjD,EAAS,CAACqD,EAAMtG,KACpB,MAAMuG,EAAOvB,EAAShF,GAGhBwG,EAAW/B,SAASgC,eAAe5F,GAKzC,GAHAyF,EAAKvC,UAAYwC,EAGbC,EAAU,CACZ,MAAME,EAAKJ,EAAK5B,cAAc,IAAI8B,KAC9BE,GAAIA,EAAGC,OACb,CAGAL,EAAKM,iBAAiB,iBAAiBjB,QAAQe,IAC7C,MAAMG,EAAaH,EAAGI,aAAa,eAC/Bf,EAAQc,IACVH,EAAGnE,iBAAiB,QAAS,KAC3B,MAAMwE,EAAShB,EAAQc,GAAYX,EAAcQ,GAC7CK,GACFX,EAASW,QAOnB,MAAO,CACL/G,MAAOkG,EAEP/C,KAAOmD,IACL5C,EAAY4C,EACRN,GAAQA,EAAOM,EAAMJ,IAG3BjD,OAAQ,CAACqD,EAAMtG,KACb0D,EAAY4C,EACZJ,EAAelG,GAASkG,EACxBC,GAAU,EACVlD,EAAOqD,EAAMJ,IAGfhD,QAAUoD,IACJL,GAAWA,EAAUK,EAAMJ,GAC/BC,GAAU,EACVzC,EAAY,KACZ4C,EAAKvC,UAAY,IAInBqC,WACAY,SAAU,IAAMd,EAEpB,CAKA,SAASe,IACP,MAAMC,EAAgB,GAEtB,MAAO,CACLC,KAAM,CAACC,EAAOnC,EAAMnF,KAClB,MAAMS,EAAKuB,IACPvB,GAAI8G,UACN9G,EAAG8G,SAASF,KAAKC,EAAOnC,EAAMnF,IAIlCwH,GAAI,CAACF,EAAOG,KACV,MAAMhH,EAAKuB,IACX,GAAIvB,GAAI8G,SAAU,CAChB,MAAMG,EAAcjH,EAAG8G,SAASC,GAAGF,EAAOG,GAE1C,OADAL,EAActG,KAAK4G,GACZA,CACT,CACA,MAAO,QAGTC,KAAM,CAACL,EAAOG,KACZ,MAAMhH,EAAKuB,IACX,OAAIvB,GAAI8G,SACC9G,EAAG8G,SAASI,KAAKL,EAAOG,GAE1B,QAGTG,IAAK,CAACN,EAAOG,KACX,MAAMhH,EAAKuB,IACPvB,GAAI8G,UACN9G,EAAG8G,SAASK,IAAIN,EAAOG,IAI3BjF,QAAS,KACP4E,EAAcvB,QAAQgC,GAASA,KAC/BT,EAAc3F,OAAS,GAG7B,CAKA,SAASqG,EAAW7H,EAAY,IAC9B,MAAO,CACLoE,IAAK,CAAC0D,EAAO,MACX,MAAMtH,EAAKuB,IACX,GAAIvB,GAAIuH,MAAO,CACb,MAAMC,EAAWhI,EAAa8H,EAAO,GAAG9H,KAAa8H,IAAS9H,EAAa8H,EAC3E,OAAOtH,EAAGuH,MAAM3D,IAAI4D,EACtB,CACA,OAAO,MAGT/D,IAAK,CAAC6D,EAAMG,KACV,MAAMzH,EAAKuB,IACX,GAAIvB,GAAIuH,MAAO,CACb,MAAMC,EAAWhI,EAAY,GAAGA,KAAa8H,IAASA,EACtDtH,EAAGuH,MAAM9D,IAAI+D,EAAUC,EACzB,GAGFC,SAAU,CAACC,EAASX,KAClB,MAAMhH,EAAKuB,IACX,GAAIvB,GAAIuH,MAAO,CACb,MAAMK,EAAcpI,EAAY,GAAGA,KAAamI,IAAYA,EAC5D,OAAO3H,EAAGuH,MAAMR,GAAGa,EAAaZ,EAClC,CACA,MAAO,QAGb,CAKA,SAASa,EAAaC,EAAQC,GAC5B,MAAMC,KAAEA,EAAIC,IAAEA,EAAGC,aAAEA,EAAe,KAAIC,OAAEA,EAAS,KAAIC,QAAEA,EAAU,MAASL,EAEpE5E,EAAYe,SAASY,cAAc,OACzC3B,EAAUkF,UAAY,UACtBlF,EAAUmF,MAAMC,QAAU,yCAC1BpF,EAAU8B,aAAa,cAAe+C,GACtC7E,EAAU8B,aAAa,cAAegD,GAGtC9E,EAAUK,UAAY,uHAEhB0E,GAAgB,WAAWF,yBAIjCF,EAAO5C,YAAY/B,GAEnB,IAAIqF,EAAc,KAiDlB,MA/CclG,WACZ,IACE,MAAMtC,EAAKuB,IACX,IAAKvB,EAAI,MAAM,IAAImC,MAAM,gCAEzB,MAAMsG,EAAc,WAAWT,KAAQzH,KAAKC,QACtCkI,EAAiBxE,SAASY,cAAc,OAC9C4D,EAAepI,GAAKmI,EACpBC,EAAeJ,MAAMC,QAAU,6BAE/BpF,EAAUK,UAAY,GACtBL,EAAU+B,YAAYwD,GAEtB,MAAMC,EAAM3I,EAAG2I,IAAIX,EAAM,CACvBC,MACA9E,UAAW,IAAIsF,IACfG,UAAU,IAGZJ,EAAcG,QACRA,EAAI5E,QAENoE,GAAQA,EAAO,CAAEH,OAAMC,OAE7B,CAAE,MAAOpH,GACPsC,EAAUK,UAAY,+JAEMwE,0DACWnH,EAAIC,sCAGvCsH,GAASA,EAAQvH,EACvB,GAaFkD,GAEO,CAAEZ,YAAWR,QAZJL,UACd,GAAIkG,EAAa,CACf,UACQA,EAAYxE,SACpB,CAAE,MAAO6E,GAAI,CACbL,EAAc,IAChB,CACArF,EAAU2F,UAMd,CAQY,MAACC,EAAY,CACvBxG,WACA6B,gBACAI,mBACAc,kBACAuC,eACAnB,cACAW,aACA/H,UACAiC,gBACAC"}
|
|
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';
|