@nexa-stack/framework 1.1.0 → 1.1.1
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/README.md +5 -7
- package/bin/nexa.ts +25 -11
- package/docs/UI_RULES.md +19 -0
- package/package.json +4 -15
- package/packages/core/src/app.ts +1 -1
- package/public/admin-assets/nexa.umd.js +80 -0
- package/public/admin.html +6 -4
- package/public/app.html +19 -0
- package/public/index.html +22 -66
- package/public/assets/blog-CGOdzgkO.js +0 -1
- package/public/assets/blog-ML7LFtff.js +0 -1
- package/public/assets/components-B_D1ccvJ.js +0 -50
- package/public/assets/components-C67m2tNE.js +0 -1
- package/public/assets/components-DCNIrNdJ.js +0 -50
- package/public/assets/components-DZ9oc9zI.js +0 -1
- package/public/assets/contact-CAfovn36.js +0 -1
- package/public/assets/contact-bMUqmce3.js +0 -1
- package/public/assets/docs-B92Otuxs.js +0 -20
- package/public/assets/docs-BGOHuCe3.js +0 -20
- package/public/assets/docs-BUkg7Pd2.css +0 -1
- package/public/assets/echarts-mount-DdBiYEc1.js +0 -19
- package/public/assets/echarts-mount-kJrXh_za.js +0 -19
- package/public/assets/echarts-nexa-BsAEVjT0.js +0 -1
- package/public/assets/integration-BNpFB3SL.js +0 -1
- package/public/assets/integration-Br6tmvWh.js +0 -1
- package/public/assets/integration-D7vdPco_.js +0 -1
- package/public/assets/main-BBkehs0N.js +0 -1
- package/public/assets/main-Cx_-Fq0O.css +0 -1
- package/public/assets/main-ny0uOGg1.js +0 -1
- package/public/assets/src-B4_Kaae6.css +0 -1
- package/public/assets/src-BfdoaLcc.js +0 -1
- package/public/assets/src-D__MdyFu.js +0 -1
- package/public/cards/README.md +0 -17
- package/public/cards/bloom.jpg +0 -0
- package/public/compare.html +0 -66
- package/public/docs.html +0 -315
- package/public/favicon.svg +0 -11
- package/public/nexa-hero-sculpture-1280.png +0 -0
- package/public/nexa-hero-sculpture-640.png +0 -0
- package/public/nexa-hero-sculpture-960.png +0 -0
- package/public/nexa-hero-sculpture.png +0 -0
- package/public/nexa-hero-sculpture.webp +0 -0
- package/public/nexa-mark-24.png +0 -0
- package/public/nexa-mark-256.png +0 -0
- package/public/nexa-mark-32.png +0 -0
- package/public/nexa-mark-40.png +0 -0
- package/public/nexa-mark-48.png +0 -0
- package/public/nexa-mark-512.png +0 -0
- package/public/nexa-mark-64.png +0 -0
- package/public/nexa-mark-96.png +0 -0
- package/public/nexa-mark-apple.png +0 -0
- package/public/nexa-mark-product-256.png +0 -0
- package/public/nexa-mark-product.png +0 -0
- package/public/nexa-mark-source.png +0 -0
- package/public/nexa-mark-trim.png +0 -0
- package/public/nexa-mark.png +0 -0
- package/public/nexa-mark.webp +0 -0
- package/public/nexa-palette-vision.png +0 -0
- package/public/nexa-wordmark.png +0 -0
- package/public/nexa-wordmark.webp +0 -0
- package/public/og.png +0 -0
- package/public/site/about.html +0 -101
- package/public/site/blog.html +0 -87
- package/public/site/components.html +0 -251
- package/public/site/contact.html +0 -72
- package/public/site/docs/buttons.html +0 -157
- package/public/site/docs/cards.html +0 -159
- package/public/site/docs/colors.html +0 -216
- package/public/site/docs/commands.html +0 -170
- package/public/site/docs/data.html +0 -122
- package/public/site/docs/feedback.html +0 -111
- package/public/site/docs/forms.html +0 -117
- package/public/site/docs/icons.html +0 -125
- package/public/site/docs/index.html +0 -82
- package/public/site/docs/installation.html +0 -83
- package/public/site/docs/layout.html +0 -116
- package/public/site/docs/media.html +0 -96
- package/public/site/docs/navigation.html +0 -122
- package/public/site/docs/overlays.html +0 -95
- package/public/site/docs/pickers.html +0 -126
- package/public/site/docs/sections.html +0 -111
- package/public/site/docs/typography.html +0 -97
- package/public/site/docs/usage.html +0 -76
- package/public/site/features.html +0 -107
- package/public/site/index.html +0 -117
- package/public/site/integration.html +0 -43
- package/public/site/pricing.html +0 -87
- package/ui/cards/README.md +0 -17
- package/ui/cards/bloom.jpg +0 -0
- package/ui/echarts-mount-DWNKcqeo.js +0 -22945
- package/ui/echarts-nexa-BY8eW9ug.js +0 -456
- package/ui/favicon.svg +0 -11
- package/ui/nexa-hero-sculpture-1280.png +0 -0
- package/ui/nexa-hero-sculpture-640.png +0 -0
- package/ui/nexa-hero-sculpture-960.png +0 -0
- package/ui/nexa-hero-sculpture.png +0 -0
- package/ui/nexa-hero-sculpture.webp +0 -0
- package/ui/nexa-mark-24.png +0 -0
- package/ui/nexa-mark-256.png +0 -0
- package/ui/nexa-mark-32.png +0 -0
- package/ui/nexa-mark-40.png +0 -0
- package/ui/nexa-mark-48.png +0 -0
- package/ui/nexa-mark-512.png +0 -0
- package/ui/nexa-mark-64.png +0 -0
- package/ui/nexa-mark-96.png +0 -0
- package/ui/nexa-mark-apple.png +0 -0
- package/ui/nexa-mark-product-256.png +0 -0
- package/ui/nexa-mark-product.png +0 -0
- package/ui/nexa-mark-source.png +0 -0
- package/ui/nexa-mark-trim.png +0 -0
- package/ui/nexa-mark.png +0 -0
- package/ui/nexa-mark.webp +0 -0
- package/ui/nexa-palette-vision.png +0 -0
- package/ui/nexa-wordmark.png +0 -0
- package/ui/nexa-wordmark.webp +0 -0
- package/ui/nexa.js +0 -2971
- package/ui/nexa.umd.js +0 -80
- package/ui/og.png +0 -0
- package/ui/types/components/art.d.ts +0 -11
- package/ui/types/components/card-layouts.d.ts +0 -11
- package/ui/types/components/card.d.ts +0 -11
- package/ui/types/components/charts.d.ts +0 -7
- package/ui/types/components/extra.d.ts +0 -2
- package/ui/types/components/helpers.d.ts +0 -18
- package/ui/types/components/icons.d.ts +0 -24
- package/ui/types/components/index.d.ts +0 -2
- package/ui/types/components/pickers.d.ts +0 -8
- package/ui/types/components/structure.d.ts +0 -2
- package/ui/types/core/behaviors.d.ts +0 -2
- package/ui/types/core/brand-assets.d.ts +0 -44
- package/ui/types/core/colormap.d.ts +0 -49
- package/ui/types/core/echarts-mount.d.ts +0 -5
- package/ui/types/core/echarts-nexa.d.ts +0 -71
- package/ui/types/core/parser.d.ts +0 -11
- package/ui/types/core/registry.d.ts +0 -13
- package/ui/types/core/renderer.d.ts +0 -14
- package/ui/types/core/schema.d.ts +0 -8
- package/ui/types/core/toast.d.ts +0 -11
- package/ui/types/core/validate.d.ts +0 -1
- package/ui/types/index.d.ts +0 -50
- /package/{ui → public/admin-assets}/nexa.css +0 -0
package/public/docs.html
DELETED
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en" dir="ltr">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
-
<title>Nexa Docs</title>
|
|
7
|
-
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
8
|
-
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
|
9
|
-
<style>
|
|
10
|
-
:root {
|
|
11
|
-
--bg: #f6f3ee;
|
|
12
|
-
--ink: #1a1a18;
|
|
13
|
-
--muted: #5c5a55;
|
|
14
|
-
--line: #ddd8ce;
|
|
15
|
-
--panel: #fffdf9;
|
|
16
|
-
--accent: #0f5c4c;
|
|
17
|
-
--code-bg: #1e1e1c;
|
|
18
|
-
--code-fg: #e8e4dc;
|
|
19
|
-
}
|
|
20
|
-
* { box-sizing: border-box; }
|
|
21
|
-
body {
|
|
22
|
-
margin: 0;
|
|
23
|
-
font-family: "IBM Plex Sans", system-ui, sans-serif;
|
|
24
|
-
background:
|
|
25
|
-
radial-gradient(ellipse 80% 50% at 10% -10%, #dfece7 0%, transparent 55%),
|
|
26
|
-
var(--bg);
|
|
27
|
-
color: var(--ink);
|
|
28
|
-
min-height: 100vh;
|
|
29
|
-
}
|
|
30
|
-
.layout {
|
|
31
|
-
display: grid;
|
|
32
|
-
grid-template-columns: 260px 1fr;
|
|
33
|
-
min-height: 100vh;
|
|
34
|
-
}
|
|
35
|
-
aside {
|
|
36
|
-
border-right: 1px solid var(--line);
|
|
37
|
-
background: var(--panel);
|
|
38
|
-
padding: 1.5rem 1rem 2rem;
|
|
39
|
-
position: sticky;
|
|
40
|
-
top: 0;
|
|
41
|
-
height: 100vh;
|
|
42
|
-
overflow: auto;
|
|
43
|
-
}
|
|
44
|
-
.brand {
|
|
45
|
-
font-size: 1.35rem;
|
|
46
|
-
font-weight: 700;
|
|
47
|
-
color: var(--accent);
|
|
48
|
-
text-decoration: none;
|
|
49
|
-
display: block;
|
|
50
|
-
margin-bottom: 0.25rem;
|
|
51
|
-
}
|
|
52
|
-
.brand-sub {
|
|
53
|
-
font-size: 0.8rem;
|
|
54
|
-
color: var(--muted);
|
|
55
|
-
margin-bottom: 1.5rem;
|
|
56
|
-
}
|
|
57
|
-
nav a {
|
|
58
|
-
display: block;
|
|
59
|
-
padding: 0.45rem 0.7rem;
|
|
60
|
-
border-radius: 6px;
|
|
61
|
-
color: var(--ink);
|
|
62
|
-
text-decoration: none;
|
|
63
|
-
font-size: 0.92rem;
|
|
64
|
-
margin-bottom: 2px;
|
|
65
|
-
}
|
|
66
|
-
nav a:hover { background: #efeae2; }
|
|
67
|
-
nav a.active {
|
|
68
|
-
background: var(--accent);
|
|
69
|
-
color: #fff;
|
|
70
|
-
font-weight: 600;
|
|
71
|
-
}
|
|
72
|
-
nav .group {
|
|
73
|
-
font-size: 0.7rem;
|
|
74
|
-
text-transform: uppercase;
|
|
75
|
-
letter-spacing: 0.06em;
|
|
76
|
-
color: var(--muted);
|
|
77
|
-
margin: 1rem 0.7rem 0.35rem;
|
|
78
|
-
font-weight: 600;
|
|
79
|
-
}
|
|
80
|
-
main {
|
|
81
|
-
padding: 2rem 2.5rem 4rem;
|
|
82
|
-
max-width: 820px;
|
|
83
|
-
}
|
|
84
|
-
.top {
|
|
85
|
-
display: flex;
|
|
86
|
-
gap: 0.75rem;
|
|
87
|
-
align-items: center;
|
|
88
|
-
margin-bottom: 1.5rem;
|
|
89
|
-
flex-wrap: wrap;
|
|
90
|
-
}
|
|
91
|
-
.top a.btn {
|
|
92
|
-
font-size: 0.85rem;
|
|
93
|
-
color: var(--accent);
|
|
94
|
-
text-decoration: none;
|
|
95
|
-
border: 1px solid var(--line);
|
|
96
|
-
padding: 0.35rem 0.75rem;
|
|
97
|
-
border-radius: 6px;
|
|
98
|
-
background: var(--panel);
|
|
99
|
-
}
|
|
100
|
-
article h1 { font-size: 1.85rem; margin: 0 0 1rem; line-height: 1.3; }
|
|
101
|
-
article h2 { font-size: 1.25rem; margin: 2rem 0 0.75rem; border-bottom: 1px solid var(--line); padding-bottom: 0.35rem; }
|
|
102
|
-
article h3 { font-size: 1.05rem; margin: 1.4rem 0 0.5rem; }
|
|
103
|
-
article p, article li { line-height: 1.7; color: var(--ink); }
|
|
104
|
-
article p { margin: 0.65rem 0; }
|
|
105
|
-
article a { color: var(--accent); }
|
|
106
|
-
article code {
|
|
107
|
-
font-family: "IBM Plex Mono", ui-monospace, monospace;
|
|
108
|
-
font-size: 0.86em;
|
|
109
|
-
background: #efeae2;
|
|
110
|
-
padding: 0.1em 0.35em;
|
|
111
|
-
border-radius: 4px;
|
|
112
|
-
}
|
|
113
|
-
article pre {
|
|
114
|
-
background: var(--code-bg);
|
|
115
|
-
color: var(--code-fg);
|
|
116
|
-
padding: 1rem 1.1rem;
|
|
117
|
-
border-radius: 8px;
|
|
118
|
-
overflow: auto;
|
|
119
|
-
font-size: 0.84rem;
|
|
120
|
-
line-height: 1.55;
|
|
121
|
-
direction: ltr;
|
|
122
|
-
text-align: left;
|
|
123
|
-
}
|
|
124
|
-
article pre code { background: none; padding: 0; color: inherit; }
|
|
125
|
-
article table {
|
|
126
|
-
width: 100%;
|
|
127
|
-
border-collapse: collapse;
|
|
128
|
-
margin: 1rem 0;
|
|
129
|
-
font-size: 0.92rem;
|
|
130
|
-
}
|
|
131
|
-
article th, article td {
|
|
132
|
-
border: 1px solid var(--line);
|
|
133
|
-
padding: 0.5rem 0.65rem;
|
|
134
|
-
text-align: left;
|
|
135
|
-
}
|
|
136
|
-
article th { background: #efeae2; }
|
|
137
|
-
article blockquote {
|
|
138
|
-
margin: 1rem 0;
|
|
139
|
-
padding: 0.6rem 1rem;
|
|
140
|
-
border-left: 3px solid var(--accent);
|
|
141
|
-
background: #e8f2ef;
|
|
142
|
-
color: var(--muted);
|
|
143
|
-
}
|
|
144
|
-
.loading, .error { color: var(--muted); padding: 2rem 0; }
|
|
145
|
-
@media (max-width: 800px) {
|
|
146
|
-
.layout { grid-template-columns: 1fr; }
|
|
147
|
-
aside {
|
|
148
|
-
position: relative;
|
|
149
|
-
height: auto;
|
|
150
|
-
border-left: none;
|
|
151
|
-
border-bottom: 1px solid var(--line);
|
|
152
|
-
}
|
|
153
|
-
main { padding: 1.25rem; }
|
|
154
|
-
}
|
|
155
|
-
</style>
|
|
156
|
-
</head>
|
|
157
|
-
<body>
|
|
158
|
-
<div class="layout">
|
|
159
|
-
<aside>
|
|
160
|
-
<a class="brand" href="/docs">Nexa</a>
|
|
161
|
-
<div class="brand-sub">Docs · v1.0.0</div>
|
|
162
|
-
<nav id="nav"></nav>
|
|
163
|
-
</aside>
|
|
164
|
-
<main>
|
|
165
|
-
<div class="top">
|
|
166
|
-
<a class="btn" href="/admin">Admin</a>
|
|
167
|
-
<a class="btn" href="/compare">Why Nexa?</a>
|
|
168
|
-
<a class="btn" href="/api" target="_blank">API</a>
|
|
169
|
-
</div>
|
|
170
|
-
<article id="content" class="loading">Loading…</article>
|
|
171
|
-
</main>
|
|
172
|
-
</div>
|
|
173
|
-
<script>
|
|
174
|
-
const CHAPTERS = [
|
|
175
|
-
{ group: "Start here", items: [
|
|
176
|
-
{ id: "START", title: "★ Quick start" },
|
|
177
|
-
{ id: "REFERENCE", title: "★ API reference" },
|
|
178
|
-
{ id: "compare", title: "Why Nexa?" },
|
|
179
|
-
]},
|
|
180
|
-
{ group: "Guides", items: [
|
|
181
|
-
{ id: "resources", title: "Resources" },
|
|
182
|
-
{ id: "authentication", title: "Authentication" },
|
|
183
|
-
{ id: "database", title: "Database" },
|
|
184
|
-
{ id: "services", title: "Services" },
|
|
185
|
-
{ id: "advanced", title: "Advanced" },
|
|
186
|
-
{ id: "cli", title: "CLI" },
|
|
187
|
-
]},
|
|
188
|
-
{ group: "Reference", items: [
|
|
189
|
-
{ id: "FRAMEWORK", title: "Framework reference" },
|
|
190
|
-
{ id: "READY", title: "Ready checklist" },
|
|
191
|
-
]},
|
|
192
|
-
];
|
|
193
|
-
|
|
194
|
-
function slugFromHash() {
|
|
195
|
-
const h = location.hash.replace(/^#\/?/, "") || "START";
|
|
196
|
-
return h.replace(/\.md$/, "");
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
function renderNav(active) {
|
|
200
|
-
const nav = document.getElementById("nav");
|
|
201
|
-
nav.innerHTML = CHAPTERS.map((g) => {
|
|
202
|
-
const links = g.items.map((i) =>
|
|
203
|
-
`<a href="#/${i.id}" class="${i.id === active ? "active" : ""}">${i.title}</a>`
|
|
204
|
-
).join("");
|
|
205
|
-
return `<div class="group">${g.group}</div>${links}`;
|
|
206
|
-
}).join("");
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
function escapeHtml(s) {
|
|
210
|
-
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
function mdToHtml(md) {
|
|
214
|
-
const lines = md.replace(/\r\n/g, "\n").split("\n");
|
|
215
|
-
let html = "";
|
|
216
|
-
let inCode = false;
|
|
217
|
-
let codeLang = "";
|
|
218
|
-
let codeBuf = [];
|
|
219
|
-
let inTable = false;
|
|
220
|
-
let tableRows = [];
|
|
221
|
-
let inList = false;
|
|
222
|
-
|
|
223
|
-
function flushList() {
|
|
224
|
-
if (inList) { html += "</ul>"; inList = false; }
|
|
225
|
-
}
|
|
226
|
-
function flushTable() {
|
|
227
|
-
if (!inTable) return;
|
|
228
|
-
const rows = tableRows.filter((r) => !/^\s*\|?\s*-+/.test(r));
|
|
229
|
-
html += "<table>";
|
|
230
|
-
rows.forEach((row, idx) => {
|
|
231
|
-
const cells = row.replace(/^\|/, "").replace(/\|$/, "").split("|").map((c) => c.trim());
|
|
232
|
-
const tag = idx === 0 ? "th" : "td";
|
|
233
|
-
html += "<tr>" + cells.map((c) => `<${tag}>${inline(c)}</${tag}>`).join("") + "</tr>";
|
|
234
|
-
});
|
|
235
|
-
html += "</table>";
|
|
236
|
-
inTable = false;
|
|
237
|
-
tableRows = [];
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
function inline(t) {
|
|
241
|
-
return escapeHtml(t)
|
|
242
|
-
.replace(/`([^`]+)`/g, "<code>$1</code>")
|
|
243
|
-
.replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>")
|
|
244
|
-
.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2">$1</a>');
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
for (const line of lines) {
|
|
248
|
-
if (line.startsWith("```")) {
|
|
249
|
-
flushList(); flushTable();
|
|
250
|
-
if (!inCode) {
|
|
251
|
-
inCode = true;
|
|
252
|
-
codeLang = line.slice(3).trim();
|
|
253
|
-
codeBuf = [];
|
|
254
|
-
} else {
|
|
255
|
-
html += `<pre><code>${escapeHtml(codeBuf.join("\n"))}</code></pre>`;
|
|
256
|
-
inCode = false;
|
|
257
|
-
}
|
|
258
|
-
continue;
|
|
259
|
-
}
|
|
260
|
-
if (inCode) { codeBuf.push(line); continue; }
|
|
261
|
-
|
|
262
|
-
if (line.trim().startsWith("|")) {
|
|
263
|
-
flushList();
|
|
264
|
-
inTable = true;
|
|
265
|
-
tableRows.push(line);
|
|
266
|
-
continue;
|
|
267
|
-
} else {
|
|
268
|
-
flushTable();
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
if (/^### /.test(line)) { flushList(); html += `<h3>${inline(line.slice(4))}</h3>`; continue; }
|
|
272
|
-
if (/^## /.test(line)) { flushList(); html += `<h2>${inline(line.slice(3))}</h2>`; continue; }
|
|
273
|
-
if (/^# /.test(line)) { flushList(); html += `<h1>${inline(line.slice(2))}</h1>`; continue; }
|
|
274
|
-
if (/^[-*] /.test(line)) {
|
|
275
|
-
if (!inList) { html += "<ul>"; inList = true; }
|
|
276
|
-
html += `<li>${inline(line.slice(2))}</li>`;
|
|
277
|
-
continue;
|
|
278
|
-
}
|
|
279
|
-
if (/^\d+\. /.test(line)) {
|
|
280
|
-
flushList();
|
|
281
|
-
html += `<p>${inline(line)}</p>`;
|
|
282
|
-
continue;
|
|
283
|
-
}
|
|
284
|
-
if (line.trim() === "") { flushList(); continue; }
|
|
285
|
-
flushList();
|
|
286
|
-
html += `<p>${inline(line)}</p>`;
|
|
287
|
-
}
|
|
288
|
-
flushList(); flushTable();
|
|
289
|
-
if (inCode) html += `<pre><code>${escapeHtml(codeBuf.join("\n"))}</code></pre>`;
|
|
290
|
-
return html;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
async function load(id) {
|
|
294
|
-
renderNav(id);
|
|
295
|
-
const el = document.getElementById("content");
|
|
296
|
-
el.className = "loading";
|
|
297
|
-
el.textContent = "Loading…";
|
|
298
|
-
try {
|
|
299
|
-
const res = await fetch(`/api/docs/${id}`);
|
|
300
|
-
if (!res.ok) throw new Error("not found");
|
|
301
|
-
const data = await res.json();
|
|
302
|
-
el.className = "";
|
|
303
|
-
el.innerHTML = mdToHtml(data.content);
|
|
304
|
-
document.title = `${data.title || id} · Nexa Docs`;
|
|
305
|
-
} catch {
|
|
306
|
-
el.className = "error";
|
|
307
|
-
el.textContent = "Page not found.";
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
window.addEventListener("hashchange", () => load(slugFromHash()));
|
|
312
|
-
load(slugFromHash());
|
|
313
|
-
</script>
|
|
314
|
-
</body>
|
|
315
|
-
</html>
|
package/public/favicon.svg
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<rect width="32" height="32" rx="8" fill="#0B1220"/>
|
|
3
|
-
<path d="M8 24V8h4.2l7.6 11.2V8H24v16h-4.2L12.2 12.8V24H8z" fill="url(#nexaFav)"/>
|
|
4
|
-
<defs>
|
|
5
|
-
<linearGradient id="nexaFav" x1="8" y1="8" x2="24" y2="24" gradientUnits="userSpaceOnUse">
|
|
6
|
-
<stop stop-color="#68C4FF"/>
|
|
7
|
-
<stop offset=".45" stop-color="#2E9EFF"/>
|
|
8
|
-
<stop offset="1" stop-color="#7C5CFC"/>
|
|
9
|
-
</linearGradient>
|
|
10
|
-
</defs>
|
|
11
|
-
</svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/public/nexa-mark-24.png
DELETED
|
Binary file
|
package/public/nexa-mark-256.png
DELETED
|
Binary file
|
package/public/nexa-mark-32.png
DELETED
|
Binary file
|
package/public/nexa-mark-40.png
DELETED
|
Binary file
|
package/public/nexa-mark-48.png
DELETED
|
Binary file
|
package/public/nexa-mark-512.png
DELETED
|
Binary file
|
package/public/nexa-mark-64.png
DELETED
|
Binary file
|
package/public/nexa-mark-96.png
DELETED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/public/nexa-mark.png
DELETED
|
Binary file
|
package/public/nexa-mark.webp
DELETED
|
Binary file
|
|
Binary file
|
package/public/nexa-wordmark.png
DELETED
|
Binary file
|
|
Binary file
|
package/public/og.png
DELETED
|
Binary file
|
package/public/site/about.html
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en" dir="ltr">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
-
<title>Nexa — About</title>
|
|
7
|
-
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
|
|
8
|
-
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
9
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
10
|
-
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
|
|
11
|
-
<script type="module" crossorigin src="/assets/components-B_D1ccvJ.js"></script>
|
|
12
|
-
<script type="module" crossorigin src="/assets/main-ny0uOGg1.js"></script>
|
|
13
|
-
<link rel="stylesheet" crossorigin href="/assets/main-Cx_-Fq0O.css">
|
|
14
|
-
</head>
|
|
15
|
-
<body nexa="luxury light brand font-inter essential">
|
|
16
|
-
|
|
17
|
-
<header
|
|
18
|
-
nexa="header vision dock"
|
|
19
|
-
logo-href="/site/index.html"
|
|
20
|
-
links="Home|/site/index.html,Components|/site/components.html,Features|/site/features.html,Pricing|/site/pricing.html,About|/site/about.html,Blog|/site/blog.html,Contact|/site/contact.html"
|
|
21
|
-
cta="Join us"
|
|
22
|
-
cta-href="/site/contact.html"></header>
|
|
23
|
-
|
|
24
|
-
<section
|
|
25
|
-
nexa="hero vision split"
|
|
26
|
-
eyebrow="ABOUT NEXA"
|
|
27
|
-
title="We build tools|that build the future"
|
|
28
|
-
text="Nexa is a small team that believes human descriptions should become polished interfaces — fast, without framework lock-in."
|
|
29
|
-
cta="Our story"
|
|
30
|
-
cta-href="#story"
|
|
31
|
-
cta2="Contact"
|
|
32
|
-
cta2-href="/site/contact.html"></section>
|
|
33
|
-
|
|
34
|
-
<section nexa="logos" label="VALUES" brands="BUILD,SHIP,SCALE,OPEN,SIMPLE"></section>
|
|
35
|
-
|
|
36
|
-
<div nexa="container" id="story">
|
|
37
|
-
<div nexa="stack gap-large" style="padding-block:clamp(40px,6vw,72px)">
|
|
38
|
-
|
|
39
|
-
<div nexa="timeline"
|
|
40
|
-
items="2024|Idea|Command-first UI — less markup, richer output.;2025|Engine|Parser, registry, renderer, behaviors.;2026|Launch|50+ widgets, pickers, structure, feedback.;2026|Color Map|One seed color dresses the full theme."></div>
|
|
41
|
-
|
|
42
|
-
<div nexa="stat" stats="Years R&D|2+;Widgets|50+;Demo pages|6;Lock-in|0"></div>
|
|
43
|
-
|
|
44
|
-
<div nexa="grid cols-3 gap-large">
|
|
45
|
-
<article nexa="card profile glass"
|
|
46
|
-
name="Loay"
|
|
47
|
-
role="Founder · Product"
|
|
48
|
-
text="Leads the vision — short commands, premium output."
|
|
49
|
-
avatar="male"></article>
|
|
50
|
-
<article nexa="card profile glass"
|
|
51
|
-
name="Nexa Team"
|
|
52
|
-
role="Engineering"
|
|
53
|
-
text="Vanilla TS — parser, renderer, widgets, motion."
|
|
54
|
-
avatar="mark"></article>
|
|
55
|
-
<article nexa="card profile glass"
|
|
56
|
-
name="Community"
|
|
57
|
-
role="Builders worldwide"
|
|
58
|
-
text="Feedback, examples, and real-world patterns."
|
|
59
|
-
image="https://images.unsplash.com/photo-1522071820081-009f0129c71c?w=320&h=320&fit=crop"></article>
|
|
60
|
-
</div>
|
|
61
|
-
|
|
62
|
-
<div nexa="grid cols-2 gap-large">
|
|
63
|
-
<figure nexa="figure ratio-16x9"
|
|
64
|
-
image="https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?w=900&q=80"
|
|
65
|
-
caption="Design tokens and motion — part of Nexa DNA"></figure>
|
|
66
|
-
<div nexa="stack gap-small">
|
|
67
|
-
<div nexa="alert info" title="Our mission" text="A page should be described in minutes — Nexa handles the execution hours."></div>
|
|
68
|
-
<div nexa="collapse"
|
|
69
|
-
title="Manifesto"
|
|
70
|
-
text="Interfaces should be described, not assembled class-by-class. Nexa bridges human intent and polished UI."></div>
|
|
71
|
-
<div nexa="list" items="Open spirit,No framework lock-in,RTL + LTR,Premium defaults"></div>
|
|
72
|
-
</div>
|
|
73
|
-
</div>
|
|
74
|
-
|
|
75
|
-
</div>
|
|
76
|
-
</div>
|
|
77
|
-
|
|
78
|
-
<section
|
|
79
|
-
nexa="testimonials featured"
|
|
80
|
-
eyebrow="PARTNERS"
|
|
81
|
-
quote="Nexa gave us agency speed with product-team quality."
|
|
82
|
-
name="NOVA LABS"
|
|
83
|
-
role="Digital studio"></section>
|
|
84
|
-
|
|
85
|
-
<section
|
|
86
|
-
nexa="cta bold"
|
|
87
|
-
eyebrow="JOIN US"
|
|
88
|
-
title="Let us build|together."
|
|
89
|
-
cta="Get in touch"
|
|
90
|
-
cta-href="/site/contact.html"></section>
|
|
91
|
-
|
|
92
|
-
<footer
|
|
93
|
-
nexa="footer dark"
|
|
94
|
-
logo="Nexa"
|
|
95
|
-
logo-image="/nexa-mark.png"
|
|
96
|
-
logo-href="/site/index.html"
|
|
97
|
-
copy="© 2026 Nexa Framework"
|
|
98
|
-
company-links="About|/site/about.html;Contact|/site/contact.html"></footer>
|
|
99
|
-
|
|
100
|
-
</body>
|
|
101
|
-
</html>
|
package/public/site/blog.html
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en" dir="ltr">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
-
<title>Nexa — Blog</title>
|
|
7
|
-
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
|
|
8
|
-
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
9
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
10
|
-
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
|
|
11
|
-
<script type="module" crossorigin src="/assets/blog-CGOdzgkO.js"></script>
|
|
12
|
-
<link rel="modulepreload" crossorigin href="/assets/components-B_D1ccvJ.js">
|
|
13
|
-
<link rel="modulepreload" crossorigin href="/assets/main-ny0uOGg1.js">
|
|
14
|
-
<link rel="modulepreload" crossorigin href="/assets/src-BfdoaLcc.js">
|
|
15
|
-
<link rel="stylesheet" crossorigin href="/assets/main-Cx_-Fq0O.css">
|
|
16
|
-
<link rel="stylesheet" crossorigin href="/assets/src-B4_Kaae6.css">
|
|
17
|
-
</head>
|
|
18
|
-
<body nexa="luxury light brand font-inter essential">
|
|
19
|
-
|
|
20
|
-
<header
|
|
21
|
-
nexa="header vision dock"
|
|
22
|
-
logo-href="/site/index.html"
|
|
23
|
-
links="Home|/site/index.html,Components|/site/components.html,Features|/site/features.html,Pricing|/site/pricing.html,About|/site/about.html,Blog|/site/blog.html,Contact|/site/contact.html"
|
|
24
|
-
cta="Subscribe"
|
|
25
|
-
cta-href="#newsletter"></header>
|
|
26
|
-
|
|
27
|
-
<section
|
|
28
|
-
nexa="hero minimal centered"
|
|
29
|
-
eyebrow="BLOG"
|
|
30
|
-
title="Ideas from|the Nexa team"
|
|
31
|
-
text="Product updates, Color Map patterns, widget guides, and builder stories."
|
|
32
|
-
cta="Latest posts"
|
|
33
|
-
cta-href="#posts"></section>
|
|
34
|
-
|
|
35
|
-
<section
|
|
36
|
-
id="posts"
|
|
37
|
-
nexa="posts cards-3 compact"
|
|
38
|
-
eyebrow="BLOG"
|
|
39
|
-
title="Latest articles"
|
|
40
|
-
items="6-page site|Nexa-only demo — no React, no legacy examples.|Aug 28;Pickers shipped|Date, time, autocomplete, rating, stepper.|Aug 25;Structure widgets|Tree, timeline, and transfer lists.|Aug 20;Feedback layers|Sheet, toast queue, form validate.|Aug 15;ECharts pro|Add pro for rich animated charts.|Aug 10;Blocks compact|Auth, checkout, and posts patterns.|Aug 5"></section>
|
|
41
|
-
|
|
42
|
-
<div nexa="container">
|
|
43
|
-
<div nexa="stack gap-large" style="padding-block:clamp(32px,5vw,64px)">
|
|
44
|
-
|
|
45
|
-
<article nexa="card cover glass soft"
|
|
46
|
-
badge="Featured"
|
|
47
|
-
category="LAUNCH"
|
|
48
|
-
title="Nexa Site — 6 pages, zero React"
|
|
49
|
-
text="A full demo built with nexa commands only — header, hero, pricing, pickers, charts, structure."
|
|
50
|
-
cta="Read more"></article>
|
|
51
|
-
|
|
52
|
-
<div nexa="grid cols-2 gap-large">
|
|
53
|
-
<div nexa="stack gap-small">
|
|
54
|
-
<nav nexa="pagination" pages="5" current="1"></nav>
|
|
55
|
-
<div nexa="list-group" items="Product|active;Engineering;Design;Community"></div>
|
|
56
|
-
</div>
|
|
57
|
-
<div nexa="chart spark pro" title="Weekly reads" data="12,18,14,22,19,28,26,34"></div>
|
|
58
|
-
</div>
|
|
59
|
-
|
|
60
|
-
<form id="newsletter" nexa="form validate">
|
|
61
|
-
<div nexa="grid cols-2 gap-large" style="align-items:end">
|
|
62
|
-
<div nexa="field email float required" name="email" label="Email for newsletter"></div>
|
|
63
|
-
<button nexa="primary pill shadow" type="submit">Subscribe</button>
|
|
64
|
-
</div>
|
|
65
|
-
</form>
|
|
66
|
-
|
|
67
|
-
</div>
|
|
68
|
-
</div>
|
|
69
|
-
|
|
70
|
-
<section
|
|
71
|
-
nexa="cta bold"
|
|
72
|
-
eyebrow="DO NOT MISS OUT"
|
|
73
|
-
title="Build. Ship.|Scale."
|
|
74
|
-
cta="Start free"
|
|
75
|
-
cta-href="/site/pricing.html"></section>
|
|
76
|
-
|
|
77
|
-
<footer
|
|
78
|
-
nexa="footer dark"
|
|
79
|
-
logo="Nexa"
|
|
80
|
-
logo-image="/nexa-mark.png"
|
|
81
|
-
logo-href="/site/index.html"
|
|
82
|
-
copy="© 2026 Nexa Framework"
|
|
83
|
-
product-links="Components|/site/components.html;Blog|/site/blog.html;Features|/site/features.html"
|
|
84
|
-
company-links="Contact|/site/contact.html"></footer>
|
|
85
|
-
|
|
86
|
-
</body>
|
|
87
|
-
</html>
|