@avora-labs/meta-forge 1.0.5

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/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@avora-labs/meta-forge",
3
+ "version": "1.0.5",
4
+ "description": "AvoraMetaForge — A meta-driven Angular framework. Define entire applications through structured TypeScript metadata.",
5
+ "keywords": [
6
+ "angular",
7
+ "meta-driven",
8
+ "framework",
9
+ "low-code"
10
+ ],
11
+ "peerDependencies": {
12
+ "@angular/cdk": "^20.0.0 || ^21.0.0",
13
+ "@angular/common": "^20.0.0",
14
+ "@angular/core": "^20.0.0",
15
+ "@angular/forms": "^20.0.0",
16
+ "@angular/platform-browser": "^20.0.0",
17
+ "@angular/router": "^20.0.0",
18
+ "rxjs": ">=7.8.0",
19
+ "zone.js": ">=0.15.0"
20
+ },
21
+ "dependencies": {
22
+ "tslib": "^2.3.0"
23
+ },
24
+ "sideEffects": false,
25
+ "module": "fesm2022/avora-labs-meta-forge.mjs",
26
+ "typings": "types/avora-labs-meta-forge.d.ts",
27
+ "exports": {
28
+ "./package.json": {
29
+ "default": "./package.json"
30
+ },
31
+ ".": {
32
+ "types": "./types/avora-labs-meta-forge.d.ts",
33
+ "default": "./fesm2022/avora-labs-meta-forge.mjs"
34
+ }
35
+ },
36
+ "type": "module"
37
+ }
@@ -0,0 +1,85 @@
1
+ // AvoraMetaForge Glass Design System — Color Palettes
2
+
3
+ // ─── Glass Tokens ───
4
+ $glass-tokens: (
5
+ blur: 20px,
6
+ blur-heavy: 40px,
7
+ surface-opacity: 0.12,
8
+ border-opacity: 0.18,
9
+ glow-spread: 30px
10
+ );
11
+
12
+ // ─── Default Brand (Teal-Cyan) ───
13
+ $default-brand: (
14
+ primary: #06b6d4,
15
+ primary-hover: #0891b2,
16
+ primary-light: rgba(6, 182, 212, 0.15),
17
+ on-primary: #ffffff,
18
+ accent: #8b5cf6,
19
+ accent-light: rgba(139, 92, 246, 0.12),
20
+ bg: #0f1729,
21
+ bg-secondary: #131d35,
22
+ surface: rgba(255, 255, 255, 0.06),
23
+ surface-hover: rgba(255, 255, 255, 0.10),
24
+ sidebar-bg: rgba(15, 23, 42, 0.85),
25
+ sidebar-text: #cbd5e1,
26
+ navbar-bg: rgba(15, 23, 42, 0.65),
27
+ border: rgba(255, 255, 255, 0.08),
28
+ border-light: rgba(255, 255, 255, 0.12),
29
+ text: #f1f5f9,
30
+ text-muted: #94a3b8,
31
+ gradient-1: #06b6d4,
32
+ gradient-2: #8b5cf6,
33
+ gradient-3: #0ea5e9,
34
+ glow-color: rgba(6, 182, 212, 0.25)
35
+ );
36
+
37
+ // ─── Blue Brand (Client A) ───
38
+ $blue-brand: (
39
+ primary: #3b82f6,
40
+ primary-hover: #2563eb,
41
+ primary-light: rgba(59, 130, 246, 0.15),
42
+ on-primary: #ffffff,
43
+ accent: #6366f1,
44
+ accent-light: rgba(99, 102, 241, 0.12),
45
+ bg: #0c1524,
46
+ bg-secondary: #111c33,
47
+ surface: rgba(255, 255, 255, 0.06),
48
+ surface-hover: rgba(255, 255, 255, 0.10),
49
+ sidebar-bg: rgba(12, 21, 36, 0.88),
50
+ sidebar-text: #cbd5e1,
51
+ navbar-bg: rgba(12, 21, 36, 0.65),
52
+ border: rgba(255, 255, 255, 0.08),
53
+ border-light: rgba(255, 255, 255, 0.12),
54
+ text: #f1f5f9,
55
+ text-muted: #94a3b8,
56
+ gradient-1: #3b82f6,
57
+ gradient-2: #6366f1,
58
+ gradient-3: #0ea5e9,
59
+ glow-color: rgba(59, 130, 246, 0.25)
60
+ );
61
+
62
+ // ─── Red Brand (Client B) ───
63
+ $red-brand: (
64
+ primary: #f43f5e,
65
+ primary-hover: #e11d48,
66
+ primary-light: rgba(244, 63, 94, 0.15),
67
+ on-primary: #ffffff,
68
+ accent: #f59e0b,
69
+ accent-light: rgba(245, 158, 11, 0.12),
70
+ bg: #180a0e,
71
+ bg-secondary: #1f0f14,
72
+ surface: rgba(255, 255, 255, 0.06),
73
+ surface-hover: rgba(255, 255, 255, 0.10),
74
+ sidebar-bg: rgba(24, 10, 14, 0.88),
75
+ sidebar-text: #fecdd3,
76
+ navbar-bg: rgba(24, 10, 14, 0.65),
77
+ border: rgba(255, 255, 255, 0.08),
78
+ border-light: rgba(255, 255, 255, 0.12),
79
+ text: #fff1f2,
80
+ text-muted: #fda4af,
81
+ gradient-1: #f43f5e,
82
+ gradient-2: #f59e0b,
83
+ gradient-3: #ec4899,
84
+ glow-color: rgba(244, 63, 94, 0.25)
85
+ );
@@ -0,0 +1,97 @@
1
+ @use 'sass:map';
2
+ @use './palettes' as *;
3
+
4
+ // ─── Mixin for generating theme variables from a palette ───
5
+ @mixin apply-theme($brand) {
6
+ --app-primary: #{map.get($brand, primary)};
7
+ --app-primary-hover: #{map.get($brand, primary-hover)};
8
+ --app-primary-light: #{map.get($brand, primary-light)};
9
+ --app-on-primary: #{map.get($brand, on-primary)};
10
+ --app-accent: #{map.get($brand, accent)};
11
+ --app-accent-light: #{map.get($brand, accent-light)};
12
+
13
+ --app-bg: #{map.get($brand, bg)};
14
+ --app-bg-secondary: #{map.get($brand, bg-secondary)};
15
+ --app-surface: #{map.get($brand, surface)};
16
+ --app-surface-hover: #{map.get($brand, surface-hover)};
17
+ --app-sidebar-bg: #{map.get($brand, sidebar-bg)};
18
+ --app-sidebar-text: #{map.get($brand, sidebar-text)};
19
+ --app-navbar-bg: #{map.get($brand, navbar-bg)};
20
+ --app-border: #{map.get($brand, border)};
21
+ --app-border-light: #{map.get($brand, border-light)};
22
+ --app-text: #{map.get($brand, text)};
23
+ --app-text-muted: #{map.get($brand, text-muted)};
24
+
25
+ --app-gradient-1: #{map.get($brand, gradient-1)};
26
+ --app-gradient-2: #{map.get($brand, gradient-2)};
27
+ --app-gradient-3: #{map.get($brand, gradient-3)};
28
+ --app-glow: #{map.get($brand, glow-color)};
29
+ }
30
+
31
+ [data-theme="client-a"] {
32
+ @include apply-theme($blue-brand);
33
+ }
34
+
35
+ [data-theme="client-b"] {
36
+ @include apply-theme($red-brand);
37
+ }
38
+
39
+ // ─── Light Mode ───
40
+ // Applied when data-color-scheme="light" is set on <html>.
41
+ // Keeps the same teal primary/accent brand but flips all surfaces
42
+ // to light values and adjusts glass tokens for a bright environment.
43
+ [data-color-scheme="light"] {
44
+ color-scheme: light;
45
+
46
+ // Primary brand — unchanged
47
+ --app-primary: #0891b2;
48
+ --app-primary-hover: #0e7490;
49
+ --app-primary-light: rgba(8, 145, 178, 0.12);
50
+ --app-on-primary: #ffffff;
51
+ --app-accent: #7c3aed;
52
+ --app-accent-light: rgba(124, 58, 237, 0.10);
53
+
54
+ // Backgrounds
55
+ --app-bg: #f0f4f8;
56
+ --app-bg-secondary: #e4eaf2;
57
+ --app-surface: rgba(255, 255, 255, 0.80);
58
+ --app-surface-hover: rgba(255, 255, 255, 0.95);
59
+
60
+ // Layout
61
+ --app-sidebar-bg: rgba(248, 250, 252, 0.92);
62
+ --app-sidebar-text: #334155;
63
+ --app-navbar-bg: rgba(240, 244, 248, 0.88);
64
+
65
+ // Borders
66
+ --app-border: rgba(0, 0, 0, 0.08);
67
+ --app-border-light: rgba(0, 0, 0, 0.05);
68
+
69
+ // Text
70
+ --app-text: #0f172a;
71
+ --app-text-muted: #475569;
72
+
73
+ // Gradients & glow
74
+ --app-gradient-1: #06b6d4;
75
+ --app-gradient-2: #8b5cf6;
76
+ --app-gradient-3: #0ea5e9;
77
+ --app-glow: rgba(8, 145, 178, 0.20);
78
+
79
+ // Glass system — lighter values for a bright surface
80
+ --glass-bg: rgba(255, 255, 255, 0.65);
81
+ --glass-bg-hover: rgba(255, 255, 255, 0.85);
82
+ --glass-border: rgba(0, 0, 0, 0.07);
83
+ --glass-border-light: rgba(0, 0, 0, 0.12);
84
+ --glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.10);
85
+ --glass-shadow-sm: 0 4px 16px rgba(0, 0, 0, 0.07);
86
+
87
+ // Scrollbar
88
+ scrollbar-color: rgba(0, 0, 0, 0.2) transparent;
89
+ }
90
+
91
+ // Scrollbar thumb for light mode
92
+ [data-color-scheme="light"] ::-webkit-scrollbar-thumb {
93
+ background: rgba(0, 0, 0, 0.15);
94
+ }
95
+ [data-color-scheme="light"] ::-webkit-scrollbar-thumb:hover {
96
+ background: rgba(0, 0, 0, 0.25);
97
+ }
@@ -0,0 +1,57 @@
1
+ @use 'sass:map';
2
+ @use './palettes' as *;
3
+
4
+ :root {
5
+ color-scheme: dark;
6
+
7
+ // ─── Primary Colors ───
8
+ --app-primary: #{map.get($default-brand, primary)};
9
+ --app-primary-hover: #{map.get($default-brand, primary-hover)};
10
+ --app-primary-light: #{map.get($default-brand, primary-light)};
11
+ --app-on-primary: #{map.get($default-brand, on-primary)};
12
+ --app-accent: #{map.get($default-brand, accent)};
13
+ --app-accent-light: #{map.get($default-brand, accent-light)};
14
+
15
+ // ─── Backgrounds & Surfaces ───
16
+ --app-bg: #{map.get($default-brand, bg)};
17
+ --app-bg-secondary: #{map.get($default-brand, bg-secondary)};
18
+ --app-surface: #{map.get($default-brand, surface)};
19
+ --app-surface-hover: #{map.get($default-brand, surface-hover)};
20
+ --app-border: #{map.get($default-brand, border)};
21
+ --app-border-light: #{map.get($default-brand, border-light)};
22
+
23
+ // ─── Text ───
24
+ --app-text: #{map.get($default-brand, text)};
25
+ --app-text-muted: #{map.get($default-brand, text-muted)};
26
+
27
+ // ─── Layout Surfaces ───
28
+ --app-sidebar-bg: #{map.get($default-brand, sidebar-bg)};
29
+ --app-sidebar-text: #{map.get($default-brand, sidebar-text)};
30
+ --app-navbar-bg: #{map.get($default-brand, navbar-bg)};
31
+
32
+ // ─── Gradients & Glows ───
33
+ --app-gradient-1: #{map.get($default-brand, gradient-1)};
34
+ --app-gradient-2: #{map.get($default-brand, gradient-2)};
35
+ --app-gradient-3: #{map.get($default-brand, gradient-3)};
36
+ --app-glow: #{map.get($default-brand, glow-color)};
37
+
38
+ // ─── Glass System ───
39
+ --glass-blur: #{map.get($glass-tokens, blur)};
40
+ --glass-blur-heavy: #{map.get($glass-tokens, blur-heavy)};
41
+ --glass-bg: rgba(255, 255, 255, 0.06);
42
+ --glass-bg-hover: rgba(255, 255, 255, 0.10);
43
+ --glass-border: rgba(255, 255, 255, 0.08);
44
+ --glass-border-light: rgba(255, 255, 255, 0.14);
45
+ --glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
46
+ --glass-shadow-sm: 0 4px 16px rgba(0, 0, 0, 0.2);
47
+ --glass-shadow-glow: 0 0 #{map.get($glass-tokens, glow-spread)} var(--app-glow);
48
+
49
+ // ─── Animation Tokens ───
50
+ --transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1);
51
+ --transition-smooth: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
52
+ --transition-spring: 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
53
+ --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
54
+
55
+ // ─── Layout ───
56
+ --sidebar-width: 260px;
57
+ }
@@ -0,0 +1,296 @@
1
+ /* ═══════════════════════════════════════════════════════════════
2
+ AvoraMetaForge — Glass Design System Global Styles
3
+ ═══════════════════════════════════════════════════════════════ */
4
+
5
+ @use 'variables' as *;
6
+ @use 'themes' as *;
7
+
8
+ @import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Outfit:wght@100..900&display=swap');
9
+
10
+ /* ─── Reset ─── */
11
+ * {
12
+ box-sizing: border-box;
13
+ margin: 0;
14
+ padding: 0;
15
+ }
16
+
17
+ /* ─── Root height chain — required for auth page scrolling ─── */
18
+ html {
19
+ height: 100%;
20
+ }
21
+
22
+ /* ─── Body ─── */
23
+ body {
24
+ font-family: 'Inter', system-ui, -apple-system, sans-serif;
25
+ background-color: var(--app-bg);
26
+ color: var(--app-text);
27
+ line-height: 1.5;
28
+ -webkit-font-smoothing: antialiased;
29
+ -moz-osx-font-smoothing: grayscale;
30
+ height: 100%;
31
+ overflow-x: hidden; /* allow vertical scroll; block horizontal */
32
+ }
33
+
34
+ /* ─── Typography ─── */
35
+ h1,
36
+ h2,
37
+ h3,
38
+ h4,
39
+ h5,
40
+ h6 {
41
+ font-family: 'Outfit', sans-serif;
42
+ font-weight: 700;
43
+ color: var(--app-text);
44
+ }
45
+
46
+ a {
47
+ color: var(--app-primary);
48
+ text-decoration: none;
49
+ transition: color var(--transition-fast);
50
+ }
51
+
52
+ a:hover {
53
+ color: var(--app-primary-hover);
54
+ }
55
+
56
+ button {
57
+ font-family: inherit;
58
+ cursor: pointer;
59
+ }
60
+
61
+ /* ─── Scrollbar ─── */
62
+ ::-webkit-scrollbar {
63
+ width: 6px;
64
+ height: 6px;
65
+ }
66
+
67
+ ::-webkit-scrollbar-track {
68
+ background: transparent;
69
+ }
70
+
71
+ ::-webkit-scrollbar-thumb {
72
+ background: rgba(255, 255, 255, 0.1);
73
+ border-radius: 3px;
74
+ }
75
+
76
+ ::-webkit-scrollbar-thumb:hover {
77
+ background: rgba(255, 255, 255, 0.2);
78
+ }
79
+
80
+ /* ═══════════════════════════════════════════════════════════════
81
+ Glass Utilities
82
+ ═══════════════════════════════════════════════════════════════ */
83
+
84
+ .glass {
85
+ background: var(--glass-bg);
86
+ backdrop-filter: blur(var(--glass-blur));
87
+ -webkit-backdrop-filter: blur(var(--glass-blur));
88
+ border: 1px solid var(--glass-border);
89
+ }
90
+
91
+ .card {
92
+ background: var(--glass-bg);
93
+ backdrop-filter: blur(var(--glass-blur));
94
+ -webkit-backdrop-filter: blur(var(--glass-blur));
95
+ border: 1px solid var(--glass-border);
96
+ border-radius: 16px;
97
+ padding: 24px;
98
+ box-shadow: var(--glass-shadow-sm);
99
+ transition: all var(--transition-smooth);
100
+ }
101
+
102
+ .card:hover {
103
+ background: var(--glass-bg-hover);
104
+ border-color: var(--glass-border-light);
105
+ box-shadow: var(--glass-shadow);
106
+ transform: translateY(-2px);
107
+ }
108
+
109
+ /* ─── Buttons ─── */
110
+ .btn-primary {
111
+ background: linear-gradient(135deg, var(--app-primary), var(--app-accent));
112
+ color: var(--app-on-primary);
113
+ border: none;
114
+ padding: 10px 20px;
115
+ border-radius: 10px;
116
+ font-weight: 600;
117
+ transition: all var(--transition-smooth);
118
+ position: relative;
119
+ overflow: hidden;
120
+ }
121
+
122
+ .btn-primary::after {
123
+ content: '';
124
+ position: absolute;
125
+ top: 0;
126
+ left: -100%;
127
+ right: 0;
128
+ bottom: 0;
129
+ width: 200%;
130
+ background: linear-gradient(90deg,
131
+ transparent 0%,
132
+ rgba(255, 255, 255, 0.1) 50%,
133
+ transparent 100%);
134
+ transition: left 0.5s ease;
135
+ }
136
+
137
+ .btn-primary:hover {
138
+ transform: translateY(-2px);
139
+ box-shadow: 0 8px 24px -4px var(--app-glow);
140
+ }
141
+
142
+ .btn-primary:hover::after {
143
+ left: 100%;
144
+ }
145
+
146
+ /* ═══════════════════════════════════════════════════════════════
147
+ Keyframe Animations
148
+ ═══════════════════════════════════════════════════════════════ */
149
+
150
+ @keyframes fadeInUp {
151
+ from {
152
+ opacity: 0;
153
+ transform: translateY(20px);
154
+ }
155
+
156
+ to {
157
+ opacity: 1;
158
+ transform: translateY(0);
159
+ }
160
+ }
161
+
162
+ @keyframes fadeIn {
163
+ from {
164
+ opacity: 0;
165
+ }
166
+
167
+ to {
168
+ opacity: 1;
169
+ }
170
+ }
171
+
172
+ @keyframes shimmer {
173
+ 0% {
174
+ background-position: -200% center;
175
+ }
176
+
177
+ 100% {
178
+ background-position: 200% center;
179
+ }
180
+ }
181
+
182
+ @keyframes gradientShift {
183
+
184
+ 0%,
185
+ 100% {
186
+ background-position: 0% 50%;
187
+ }
188
+
189
+ 25% {
190
+ background-position: 50% 0%;
191
+ }
192
+
193
+ 50% {
194
+ background-position: 100% 50%;
195
+ }
196
+
197
+ 75% {
198
+ background-position: 50% 100%;
199
+ }
200
+ }
201
+
202
+ @keyframes pulseGlow {
203
+
204
+ 0%,
205
+ 100% {
206
+ box-shadow: 0 0 20px var(--app-glow);
207
+ }
208
+
209
+ 50% {
210
+ box-shadow: 0 0 40px var(--app-glow), 0 0 60px var(--app-glow);
211
+ }
212
+ }
213
+
214
+ @keyframes float {
215
+
216
+ 0%,
217
+ 100% {
218
+ transform: translateY(0);
219
+ }
220
+
221
+ 50% {
222
+ transform: translateY(-10px);
223
+ }
224
+ }
225
+
226
+ @keyframes slideInDown {
227
+ from {
228
+ opacity: 0;
229
+ transform: translateY(-10px) scale(0.95);
230
+ }
231
+
232
+ to {
233
+ opacity: 1;
234
+ transform: translateY(0) scale(1);
235
+ }
236
+ }
237
+
238
+ @keyframes blobMove1 {
239
+
240
+ 0%,
241
+ 100% {
242
+ transform: translate(0, 0) scale(1);
243
+ }
244
+
245
+ 25% {
246
+ transform: translate(30px, -50px) scale(1.1);
247
+ }
248
+
249
+ 50% {
250
+ transform: translate(-20px, 20px) scale(0.9);
251
+ }
252
+
253
+ 75% {
254
+ transform: translate(50px, 30px) scale(1.05);
255
+ }
256
+ }
257
+
258
+ @keyframes blobMove2 {
259
+
260
+ 0%,
261
+ 100% {
262
+ transform: translate(0, 0) scale(1);
263
+ }
264
+
265
+ 25% {
266
+ transform: translate(-40px, 30px) scale(0.95);
267
+ }
268
+
269
+ 50% {
270
+ transform: translate(30px, -40px) scale(1.1);
271
+ }
272
+
273
+ 75% {
274
+ transform: translate(-20px, -30px) scale(1);
275
+ }
276
+ }
277
+
278
+ @keyframes blobMove3 {
279
+
280
+ 0%,
281
+ 100% {
282
+ transform: translate(0, 0) scale(1.05);
283
+ }
284
+
285
+ 25% {
286
+ transform: translate(20px, 40px) scale(1);
287
+ }
288
+
289
+ 50% {
290
+ transform: translate(-40px, -20px) scale(1.1);
291
+ }
292
+
293
+ 75% {
294
+ transform: translate(30px, -30px) scale(0.95);
295
+ }
296
+ }