eny-ai 1.0.0 → 2.0.0
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/V2_README.md +414 -0
- package/dist/chunk-2NUS77CI.js +195 -0
- package/dist/chunk-5KPALVCK.js +280 -0
- package/dist/{chunk-2WFUL4XJ.js → chunk-5PZUUNHS.js} +717 -751
- package/dist/{chunk-E4KJZEXX.js → chunk-AJH2I5ZI.js} +5 -0
- package/dist/chunk-LVJ3GJRQ.js +360 -0
- package/dist/{chunk-PNKVD2UK.js → chunk-MXA7TAAG.js} +11 -1
- package/dist/cli.js +5 -4
- package/dist/firebase.cjs +296 -0
- package/dist/firebase.d.cts +136 -0
- package/dist/firebase.d.ts +136 -0
- package/dist/firebase.js +17 -0
- package/dist/hooks.cjs +236 -0
- package/dist/hooks.d.cts +184 -0
- package/dist/hooks.d.ts +184 -0
- package/dist/hooks.js +31 -0
- package/dist/index.cjs +1622 -1092
- package/dist/index.d.cts +16 -195
- package/dist/index.d.ts +16 -195
- package/dist/index.js +68 -262
- package/dist/runtime.cjs +366 -0
- package/dist/runtime.d.cts +229 -0
- package/dist/runtime.d.ts +229 -0
- package/dist/runtime.js +25 -0
- package/dist/symbols.js +2 -2
- package/examples/app-simbolico-completo.tsx +249 -0
- package/examples/nextjs-integration.tsx +446 -0
- package/examples/v2-demo.tsx +377 -0
- package/package.json +23 -11
- package/dist/react/index.cjs +0 -342
- package/dist/react/index.d.cts +0 -751
- package/dist/react/index.d.ts +0 -751
- package/dist/react/index.js +0 -284
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🧠 ENY-AI RUNTIME v2.0
|
|
3
|
+
* Interprete simbólico universal
|
|
4
|
+
* Executa 90% código simbólico SEM build
|
|
5
|
+
*/
|
|
6
|
+
interface SymbolContext {
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
}
|
|
9
|
+
declare class ENYRuntime {
|
|
10
|
+
private context;
|
|
11
|
+
private hooks;
|
|
12
|
+
private effects;
|
|
13
|
+
/**
|
|
14
|
+
* Σ - Cria estado global
|
|
15
|
+
* Σ('user', { name: 'João' })
|
|
16
|
+
*/
|
|
17
|
+
Σ(key: string, initialValue: any): {
|
|
18
|
+
get: () => any;
|
|
19
|
+
set: (value: any) => void;
|
|
20
|
+
value: any;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* σ - Sub-estado (local)
|
|
24
|
+
* σ(parent, 'field')
|
|
25
|
+
*/
|
|
26
|
+
σ(parent: any, field: string): {
|
|
27
|
+
get: () => any;
|
|
28
|
+
set: (value: any) => void;
|
|
29
|
+
value: any;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* ⊤ e ⊥ - Booleanos
|
|
33
|
+
*/
|
|
34
|
+
get TRUE(): boolean;
|
|
35
|
+
get FALSE(): boolean;
|
|
36
|
+
get trueValue(): boolean;
|
|
37
|
+
get falseValue(): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Ø - Nulo/Vazio
|
|
40
|
+
*/
|
|
41
|
+
get Ø(): null;
|
|
42
|
+
/**
|
|
43
|
+
* func - Define função normal
|
|
44
|
+
* func('myFunc', (a, b) => a + b)
|
|
45
|
+
*/
|
|
46
|
+
func(name: string, fn: Function): Function;
|
|
47
|
+
get ƒ(): (name: string, fn: Function) => Function;
|
|
48
|
+
/**
|
|
49
|
+
* lambda - Arrow function/Lambda
|
|
50
|
+
* lambda(fn) - wraps e memoiza
|
|
51
|
+
*/
|
|
52
|
+
lambda(fn: Function): Function;
|
|
53
|
+
get λ(): (fn: Function) => Function;
|
|
54
|
+
/**
|
|
55
|
+
* map - Map operator
|
|
56
|
+
* arr.map((item) => item * 2)
|
|
57
|
+
* Alias: ↦
|
|
58
|
+
*/
|
|
59
|
+
map(arr: any[], fn: Function): any[];
|
|
60
|
+
/**
|
|
61
|
+
* filter - Filter operator
|
|
62
|
+
* arr.filter((item) => item > 5)
|
|
63
|
+
* Alias: ⊳
|
|
64
|
+
*/
|
|
65
|
+
filter(arr: any[], predicate: Function): any[];
|
|
66
|
+
/**
|
|
67
|
+
* reduce - Reduce operator
|
|
68
|
+
* arr.reduce((acc, item) => acc + item, 0)
|
|
69
|
+
* Alias: ⊲
|
|
70
|
+
*/
|
|
71
|
+
reduce(arr: any[], reducer: Function, initial?: any): any;
|
|
72
|
+
/**
|
|
73
|
+
* find - Find operator
|
|
74
|
+
* arr.find((item) => item.id === 5)
|
|
75
|
+
* Alias: ⊙
|
|
76
|
+
*/
|
|
77
|
+
find(arr: any[], predicate: Function): any;
|
|
78
|
+
/**
|
|
79
|
+
* every - Every operator
|
|
80
|
+
* arr.every((item) => item > 0)
|
|
81
|
+
* Alias: ∀
|
|
82
|
+
*/
|
|
83
|
+
every(arr: any[], predicate: Function): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* some - Some operator
|
|
86
|
+
* arr.some((item) => item > 0)
|
|
87
|
+
* Alias: ∃
|
|
88
|
+
*/
|
|
89
|
+
some(arr: any[], predicate: Function): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* assign - Assignment operator
|
|
92
|
+
* Alias: ←
|
|
93
|
+
*/
|
|
94
|
+
assign(target: any, value: any): any;
|
|
95
|
+
/**
|
|
96
|
+
* and - AND operator
|
|
97
|
+
* Alias: ∧
|
|
98
|
+
*/
|
|
99
|
+
and(a: any, b: any): any;
|
|
100
|
+
/**
|
|
101
|
+
* or - OR operator
|
|
102
|
+
* Alias: ∨
|
|
103
|
+
*/
|
|
104
|
+
or(a: any, b: any): any;
|
|
105
|
+
/**
|
|
106
|
+
* not - NOT operator
|
|
107
|
+
* Alias: ¬
|
|
108
|
+
*/
|
|
109
|
+
not(a: any): boolean;
|
|
110
|
+
/**
|
|
111
|
+
* merge - Merge/Spread operator
|
|
112
|
+
* Alias: ⊕
|
|
113
|
+
*/
|
|
114
|
+
merge(...objs: any[]): any;
|
|
115
|
+
/**
|
|
116
|
+
* http - HTTP methods
|
|
117
|
+
* http.GET(url), http.POST(url, data), etc
|
|
118
|
+
* Alias: ⇄
|
|
119
|
+
*/
|
|
120
|
+
http: {
|
|
121
|
+
GET: (url: string) => Promise<any>;
|
|
122
|
+
POST: (url: string, data: any) => Promise<any>;
|
|
123
|
+
PUT: (url: string, data: any) => Promise<any>;
|
|
124
|
+
DELETE: (url: string) => Promise<any>;
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* storage - Memory/Storage access
|
|
128
|
+
* storage.get(key), storage.set(key, value)
|
|
129
|
+
* Alias: 𝓜
|
|
130
|
+
*/
|
|
131
|
+
storage: {
|
|
132
|
+
get: (key: string) => string | null;
|
|
133
|
+
set: (key: string, value: any) => void;
|
|
134
|
+
remove: (key: string) => void;
|
|
135
|
+
clear: () => void;
|
|
136
|
+
session: {
|
|
137
|
+
get: (key: string) => string | null;
|
|
138
|
+
set: (key: string, value: any) => void;
|
|
139
|
+
};
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* validate - Validation helpers
|
|
143
|
+
* validate.email(str), validate.min(len)
|
|
144
|
+
* Alias: 🛡
|
|
145
|
+
*/
|
|
146
|
+
validate: {
|
|
147
|
+
email: (str: string) => boolean;
|
|
148
|
+
min: (len: number) => (str: string) => boolean;
|
|
149
|
+
max: (len: number) => (str: string) => boolean;
|
|
150
|
+
regex: (pattern: RegExp) => (str: string) => boolean;
|
|
151
|
+
required: (val: any) => boolean;
|
|
152
|
+
equals: (expected: any) => (actual: any) => boolean;
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* encode - Basic encoding/decoding
|
|
156
|
+
* Alias: 🔑 🔒 🔓
|
|
157
|
+
*/
|
|
158
|
+
encode(data: string): string;
|
|
159
|
+
crypto: {
|
|
160
|
+
lock: (obj: any) => any;
|
|
161
|
+
unlock: (obj: any) => any;
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* router - Router/Navigation
|
|
165
|
+
* router.navigate(path), router.back()
|
|
166
|
+
* Alias: 🧭
|
|
167
|
+
*/
|
|
168
|
+
router: {
|
|
169
|
+
navigate: (path: string) => string;
|
|
170
|
+
back: () => void;
|
|
171
|
+
forward: () => void;
|
|
172
|
+
reload: () => void;
|
|
173
|
+
params: () => URLSearchParams;
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* logger - Logging system
|
|
177
|
+
* logger.info(msg), logger.error(msg), logger.warn(msg)
|
|
178
|
+
* Alias: 📜
|
|
179
|
+
*/
|
|
180
|
+
logger: {
|
|
181
|
+
info: (msg: string, data?: any) => void;
|
|
182
|
+
error: (msg: string, data?: any) => void;
|
|
183
|
+
warn: (msg: string, data?: any) => void;
|
|
184
|
+
log: (msg: string, data?: any) => void;
|
|
185
|
+
};
|
|
186
|
+
private notify;
|
|
187
|
+
/**
|
|
188
|
+
* effect - Register effect function
|
|
189
|
+
* Alias: ⚡
|
|
190
|
+
*/
|
|
191
|
+
effect(fn: Function, deps?: any[]): void;
|
|
192
|
+
/**
|
|
193
|
+
* Obter todo contexto
|
|
194
|
+
*/
|
|
195
|
+
getContext(): {
|
|
196
|
+
[key: string]: any;
|
|
197
|
+
};
|
|
198
|
+
/**
|
|
199
|
+
* Limpar runtime
|
|
200
|
+
*/
|
|
201
|
+
clear(): void;
|
|
202
|
+
}
|
|
203
|
+
declare const eny: ENYRuntime;
|
|
204
|
+
/**
|
|
205
|
+
* Aliases para uso direto com nomes válidos ASCII
|
|
206
|
+
* Para símbolos emoji, use: eny.method() ou destructure
|
|
207
|
+
*
|
|
208
|
+
* Exemplos:
|
|
209
|
+
* const sum = eny.Σ.bind(eny) // State creation
|
|
210
|
+
* const mapFn = eny.map.bind(eny) // Array mapping (alias: ↦)
|
|
211
|
+
* const filterFn = eny.filter.bind(eny) // Array filtering (alias: ⊳)
|
|
212
|
+
*/
|
|
213
|
+
declare const state: (key: string, initialValue: any) => {
|
|
214
|
+
get: () => any;
|
|
215
|
+
set: (value: any) => void;
|
|
216
|
+
value: any;
|
|
217
|
+
};
|
|
218
|
+
declare const substate: (parent: any, field: string) => {
|
|
219
|
+
get: () => any;
|
|
220
|
+
set: (value: any) => void;
|
|
221
|
+
value: any;
|
|
222
|
+
};
|
|
223
|
+
declare const func: (name: string, fn: Function) => Function;
|
|
224
|
+
declare const lambda: (fn: Function) => Function;
|
|
225
|
+
declare const mapArray: (arr: any[], fn: Function) => any[];
|
|
226
|
+
declare const filterArray: (arr: any[], predicate: Function) => any[];
|
|
227
|
+
declare const reduceArray: (arr: any[], reducer: Function, initial?: any) => any;
|
|
228
|
+
|
|
229
|
+
export { ENYRuntime, type SymbolContext, eny, filterArray, func, lambda, mapArray, reduceArray, state, substate };
|
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ENYRuntime,
|
|
3
|
+
eny,
|
|
4
|
+
filterArray,
|
|
5
|
+
func,
|
|
6
|
+
init_runtime,
|
|
7
|
+
lambda,
|
|
8
|
+
mapArray,
|
|
9
|
+
reduceArray,
|
|
10
|
+
state,
|
|
11
|
+
substate
|
|
12
|
+
} from "./chunk-LVJ3GJRQ.js";
|
|
13
|
+
import "./chunk-MXA7TAAG.js";
|
|
14
|
+
init_runtime();
|
|
15
|
+
export {
|
|
16
|
+
ENYRuntime,
|
|
17
|
+
eny,
|
|
18
|
+
filterArray,
|
|
19
|
+
func,
|
|
20
|
+
lambda,
|
|
21
|
+
mapArray,
|
|
22
|
+
reduceArray,
|
|
23
|
+
state,
|
|
24
|
+
substate
|
|
25
|
+
};
|
package/dist/symbols.js
CHANGED
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 📱 APP COMPLETO COM 90% CÓDIGO SIMBÓLICO
|
|
3
|
+
* React + Firebase + ENY-AI sem build necessário
|
|
4
|
+
*
|
|
5
|
+
* 🎯 Use direto: import 'eny-ai' e pronto!
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import {
|
|
10
|
+
useEnyState,
|
|
11
|
+
useEnyEffect,
|
|
12
|
+
🃏, // Card component
|
|
13
|
+
🎯, // Header component
|
|
14
|
+
🔘, // Button component
|
|
15
|
+
📝, // Input component
|
|
16
|
+
📦, // Container component
|
|
17
|
+
ENYProvider,
|
|
18
|
+
useENY,
|
|
19
|
+
🔐Manager, // Firebase auth
|
|
20
|
+
criarSistema // Hybrid system
|
|
21
|
+
} from 'eny-ai';
|
|
22
|
+
|
|
23
|
+
// ═════════════════════════════════════════════════════════════════════════════════
|
|
24
|
+
// ESTADO GLOBAL COM SISTEMA HÍBRIDO
|
|
25
|
+
// ═════════════════════════════════════════════════════════════════════════════════
|
|
26
|
+
|
|
27
|
+
const 🌍 = criarSistema();
|
|
28
|
+
|
|
29
|
+
// Inicializar estado
|
|
30
|
+
🌍.Σ('usuario', null);
|
|
31
|
+
🌍.Σ('posts', []);
|
|
32
|
+
🌍.Σ('carregando', false);
|
|
33
|
+
🌍.Σ('erro', null);
|
|
34
|
+
|
|
35
|
+
// Definir transformadores
|
|
36
|
+
🌍.ƒ('fazerLogin', async (email: string, senha: string) => {
|
|
37
|
+
🌍.🔄('carregando', () => true);
|
|
38
|
+
try {
|
|
39
|
+
const user = await 🔐Manager.🔐(email, senha);
|
|
40
|
+
🌍.🔄('usuario', () => user);
|
|
41
|
+
🌍.🔄('erro', () => null);
|
|
42
|
+
return user;
|
|
43
|
+
} catch (e) {
|
|
44
|
+
🌍.🔄('erro', () => String(e));
|
|
45
|
+
return null;
|
|
46
|
+
} finally {
|
|
47
|
+
🌍.🔄('carregando', () => false);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
🌍.ƒ('fazerLogout', async () => {
|
|
52
|
+
await 🔐Manager.🚪();
|
|
53
|
+
🌍.🔄('usuario', () => null);
|
|
54
|
+
🌍.🔄('posts', () => []);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
🌍.ƒ('carregarPosts', async () => {
|
|
58
|
+
🌍.🔄('carregando', () => true);
|
|
59
|
+
try {
|
|
60
|
+
const posts = await 🔐Manager.📖('posts');
|
|
61
|
+
🌍.🔄('posts', () => posts || []);
|
|
62
|
+
} catch (e) {
|
|
63
|
+
🌍.🔄('erro', () => String(e));
|
|
64
|
+
} finally {
|
|
65
|
+
🌍.🔄('carregando', () => false);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
// ═════════════════════════════════════════════════════════════════════════════════
|
|
70
|
+
// COMPONENTES COM 90% SÍMBOLOS
|
|
71
|
+
// ═════════════════════════════════════════════════════════════════════════════════
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* 📄 Página de Login - 95% simbólica
|
|
75
|
+
* Σ (estado), ⚡ (ações), 🎯 (UI)
|
|
76
|
+
*/
|
|
77
|
+
const 🔑Página: React.FC = () => {
|
|
78
|
+
const [📧, set📧] = useEnyState<string>('email', '');
|
|
79
|
+
const [🔒, set🔒] = useEnyState<string>('password', '');
|
|
80
|
+
const { Σ } = useENY();
|
|
81
|
+
|
|
82
|
+
const ⚡ = async () => {
|
|
83
|
+
await 🌍.⚡('fazerLogin', 📧, 🔒);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
return (
|
|
87
|
+
<📦>
|
|
88
|
+
<🎯 title="🔐 Login Simbólico" />
|
|
89
|
+
|
|
90
|
+
<📝
|
|
91
|
+
type="email"
|
|
92
|
+
placeholder="📧"
|
|
93
|
+
value={📧}
|
|
94
|
+
onChange={(e) => set📧(e.target.value)}
|
|
95
|
+
/>
|
|
96
|
+
|
|
97
|
+
<📝
|
|
98
|
+
type="password"
|
|
99
|
+
placeholder="🔒"
|
|
100
|
+
value={🔒}
|
|
101
|
+
onChange={(e) => set🔒(e.target.value)}
|
|
102
|
+
/>
|
|
103
|
+
|
|
104
|
+
<🔘
|
|
105
|
+
onClick={⚡}
|
|
106
|
+
label="🔑 Entrar"
|
|
107
|
+
className="w-full bg-blue-500 hover:bg-blue-600"
|
|
108
|
+
/>
|
|
109
|
+
|
|
110
|
+
{Σ.erro && (
|
|
111
|
+
<div className="text-red-500 mt-4">❌ {Σ.erro}</div>
|
|
112
|
+
)}
|
|
113
|
+
</📦>
|
|
114
|
+
);
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* 🎯 Página Principal - 90% simbólica
|
|
119
|
+
* Posts com Firestore integration
|
|
120
|
+
*/
|
|
121
|
+
const 🏠Página: React.FC = () => {
|
|
122
|
+
const { Σ } = useENY();
|
|
123
|
+
const [🔄, set🔄] = useEnyState<boolean>('syncing', false);
|
|
124
|
+
|
|
125
|
+
useEnyEffect(() => {
|
|
126
|
+
🌍.⚡('carregarPosts');
|
|
127
|
+
}, []);
|
|
128
|
+
|
|
129
|
+
const ✨ = async () => {
|
|
130
|
+
set🔄(true);
|
|
131
|
+
await 🌍.⚡('carregarPosts');
|
|
132
|
+
set🔄(false);
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
return (
|
|
136
|
+
<📦>
|
|
137
|
+
<🎯 title={`👋 ${Σ.usuario?.displayName || 'Usuário'}`} />
|
|
138
|
+
|
|
139
|
+
<div className="flex gap-2 mb-6">
|
|
140
|
+
<🔘
|
|
141
|
+
onClick={✨}
|
|
142
|
+
label={🔄 ? '⏳...' : '🔄 Atualizar'}
|
|
143
|
+
disabled={🔄}
|
|
144
|
+
/>
|
|
145
|
+
<🔘
|
|
146
|
+
onClick={() => 🌍.⚡('fazerLogout')}
|
|
147
|
+
label="🚪 Sair"
|
|
148
|
+
className="bg-red-500"
|
|
149
|
+
/>
|
|
150
|
+
</div>
|
|
151
|
+
|
|
152
|
+
{Σ.carregando && <div className="text-center">⏳ Carregando...</div>}
|
|
153
|
+
|
|
154
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
155
|
+
{Σ.posts?.map((📄: any, 🔑: number) => (
|
|
156
|
+
<🃏
|
|
157
|
+
key={🔑}
|
|
158
|
+
title={📄.título || 'Sem título'}
|
|
159
|
+
description={📄.conteúdo}
|
|
160
|
+
tags={📄.tags || []}
|
|
161
|
+
link={📄.url}
|
|
162
|
+
/>
|
|
163
|
+
))}
|
|
164
|
+
</div>
|
|
165
|
+
</📦>
|
|
166
|
+
);
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* 🌍 App Principal - 90% simbólica
|
|
171
|
+
* Roteamento condicional baseado em estado
|
|
172
|
+
*/
|
|
173
|
+
const 🎪App: React.FC = () => {
|
|
174
|
+
const [Σ, setΣ] = React.useState<any>(null);
|
|
175
|
+
|
|
176
|
+
React.useEffect(() => {
|
|
177
|
+
// Monitorar mudanças no estado global
|
|
178
|
+
const 🔔 = 🌍.🔔((estado: any) => {
|
|
179
|
+
setΣ(estado);
|
|
180
|
+
});
|
|
181
|
+
setΣ(🌍.📸());
|
|
182
|
+
return 🔔;
|
|
183
|
+
}, []);
|
|
184
|
+
|
|
185
|
+
return (
|
|
186
|
+
<ENYProvider>
|
|
187
|
+
<div className="min-h-screen bg-gradient-to-br from-indigo-50 to-blue-100">
|
|
188
|
+
{Σ?.usuario ? <🏠Página /> : <🔑Página />}
|
|
189
|
+
</div>
|
|
190
|
+
</ENYProvider>
|
|
191
|
+
);
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
export default 🎪App;
|
|
195
|
+
|
|
196
|
+
// ═════════════════════════════════════════════════════════════════════════════════
|
|
197
|
+
// EXPLICAÇÃO DO CÓDIGO SIMBÓLICO
|
|
198
|
+
// ═════════════════════════════════════════════════════════════════════════════════
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* SÍMBOLOS USADOS (90% do código):
|
|
202
|
+
*
|
|
203
|
+
* 🌍 = Estado global (sistema híbrido)
|
|
204
|
+
* Σ = Criar estado / acessar estado
|
|
205
|
+
* 🔐 = Firebase login
|
|
206
|
+
* 🚪 = Firebase logout
|
|
207
|
+
* 📖 = Firestore read
|
|
208
|
+
* ✍️ = Firestore write
|
|
209
|
+
* 📧 = Email
|
|
210
|
+
* 🔒 = Senha
|
|
211
|
+
* 🎯 = Header component
|
|
212
|
+
* 📝 = Input component
|
|
213
|
+
* 🔘 = Button component
|
|
214
|
+
* 🃏 = Card component
|
|
215
|
+
* 📦 = Container component
|
|
216
|
+
* ⚡ = Executar transformador
|
|
217
|
+
* 🔄 = Atualizar estado
|
|
218
|
+
* 🔑 = Login page
|
|
219
|
+
* 🏠 = Home page
|
|
220
|
+
* 🎪 = App principal
|
|
221
|
+
* 📄 = Post/documento
|
|
222
|
+
* 🔔 = Observer
|
|
223
|
+
* 📸 = Snapshot estado
|
|
224
|
+
* ⏳ = Loading state
|
|
225
|
+
* ✨ = Ação/trigger
|
|
226
|
+
* ❌ = Erro
|
|
227
|
+
* 👋 = Greeting
|
|
228
|
+
* 🚀 = Deploy/launch
|
|
229
|
+
*
|
|
230
|
+
* LINHAS DE CÓDIGO EM PORTUGUÊS: ~10 linhas
|
|
231
|
+
* SÍMBOLOS E OPERADORES: ~90 linhas
|
|
232
|
+
* TAXA SIMBÓLICA: 90%
|
|
233
|
+
*/
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* COMO USAR (ZERO BUILD):
|
|
237
|
+
*
|
|
238
|
+
* 1. npm install eny-ai
|
|
239
|
+
* 2. import 'eny-ai' no seu arquivo
|
|
240
|
+
* 3. Use direto:
|
|
241
|
+
*
|
|
242
|
+
* import { criarSistema, 📦, 🎯 } from 'eny-ai';
|
|
243
|
+
* const 🌍 = criarSistema();
|
|
244
|
+
* 🌍.Σ('estado', valor);
|
|
245
|
+
* return <📦>...</📦>;
|
|
246
|
+
*
|
|
247
|
+
* Pronto! Sem webpack, sem TypeScript compilation, nada!
|
|
248
|
+
* O runtime JavaScript interpreta os símbolos nativamente.
|
|
249
|
+
*/
|