kreftjs 0.0.12-beta → 0.0.14-beta
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/docs/README.md +1 -1
- package/kreftjs.d.ts +1 -1
- package/kreftjs.js +2 -2
- package/package.json +1 -1
- package/templates/app/frontend/errors/ErrorMonitor.kreft +2 -2
- package/templates/app/frontend/kreftjs.d.ts +1 -1
- package/templates/app/frontend/kreftjs.js +2 -2
- package/templates/app/frontend/pages/Dashboard.kreft +1 -1
- package/templates/app/frontend/pages/Home.kreft +65 -18
- package/templates/errors/ErrorMonitor.kreft +1 -1
package/docs/README.md
CHANGED
|
@@ -82,7 +82,7 @@ npx kreftjs dev
|
|
|
82
82
|
### Check that it works
|
|
83
83
|
|
|
84
84
|
```bash
|
|
85
|
-
kreft --version # for example 0.0.
|
|
85
|
+
kreft --version # for example 0.0.14-beta
|
|
86
86
|
kreft about # Kreft and Node.js versions, this project's settings and drivers
|
|
87
87
|
kreft list # every command your version has
|
|
88
88
|
```
|
package/kreftjs.d.ts
CHANGED
package/kreftjs.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Kreft v0.0.
|
|
2
|
+
* Kreft v0.0.14-beta — reactive by nature
|
|
3
3
|
* The .kreft component language (state · derive · action · when · watch · on),
|
|
4
4
|
* { } views with k-if / k-each / k-model, components, slots, router, stores,
|
|
5
5
|
* share / receive, event bus and a template engine.
|
|
@@ -5036,7 +5036,7 @@
|
|
|
5036
5036
|
stores, storeLog, busLog,
|
|
5037
5037
|
};
|
|
5038
5038
|
|
|
5039
|
-
const VERSION = '0.0.
|
|
5039
|
+
const VERSION = '0.0.14-beta';
|
|
5040
5040
|
const Kreftjs = {
|
|
5041
5041
|
version: VERSION,
|
|
5042
5042
|
// PUBLIC_ values from .env (kreft dev and kreft build put them here); never secrets
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kreftjs",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.14-beta",
|
|
4
4
|
"description": "A tiny reactive framework with its own component language (.kreft files): router with nested routes, stores, saved data, animations, an API client, hot reload, DevTools and a template engine.",
|
|
5
5
|
"license": "Elastic-2.0",
|
|
6
6
|
"main": "kreftjs.js",
|
|
@@ -92,7 +92,7 @@ state docs = (Kreftjs.env.PUBLIC_DOCS_URL || 'http://kreftjs.com').replace(/\/+$
|
|
|
92
92
|
<div class="badges">
|
|
93
93
|
<span class="badge danger-badge">HTTP {status}</span>
|
|
94
94
|
<span class="badge solid">{currentTitle}</span>
|
|
95
|
-
<span class="badge">Kreft {Kreftjs.version || '0.0.
|
|
95
|
+
<span class="badge">Kreft {Kreftjs.version || '0.0.14-beta'}</span>
|
|
96
96
|
</div>
|
|
97
97
|
<div class="actions">
|
|
98
98
|
<button class="sm" @click={copyReport}>{copied ? 'Copied Markdown' : 'Copy Report'}</button>
|
|
@@ -189,7 +189,7 @@ state docs = (Kreftjs.env.PUBLIC_DOCS_URL || 'http://kreftjs.com').replace(/\/+$
|
|
|
189
189
|
<h3>Kreft Runtime</h3>
|
|
190
190
|
<table>
|
|
191
191
|
<tbody>
|
|
192
|
-
<tr><th>Engine</th><td><code>Kreft v{Kreftjs.version || '0.0.
|
|
192
|
+
<tr><th>Engine</th><td><code>Kreft v{Kreftjs.version || '0.0.14-beta'}</code></td></tr>
|
|
193
193
|
<tr><th>Sanitizer</th><td><code>Active (cleanHtml / SafeHtml)</code></td></tr>
|
|
194
194
|
<tr><th>Environment</th><td><code>development (APP_DEBUG=true)</code></td></tr>
|
|
195
195
|
</tbody>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Kreft v0.0.
|
|
2
|
+
* Kreft v0.0.14-beta — reactive by nature
|
|
3
3
|
* The .kreft component language (state · derive · action · when · watch · on),
|
|
4
4
|
* { } views with k-if / k-each / k-model, components, slots, router, stores,
|
|
5
5
|
* share / receive, event bus and a template engine.
|
|
@@ -5036,7 +5036,7 @@
|
|
|
5036
5036
|
stores, storeLog, busLog,
|
|
5037
5037
|
};
|
|
5038
5038
|
|
|
5039
|
-
const VERSION = '0.0.
|
|
5039
|
+
const VERSION = '0.0.14-beta';
|
|
5040
5040
|
const Kreftjs = {
|
|
5041
5041
|
version: VERSION,
|
|
5042
5042
|
// PUBLIC_ values from .env (kreft dev and kreft build put them here); never secrets
|
|
@@ -112,7 +112,7 @@ state docs = (Kreftjs.env.PUBLIC_DOCS_URL || 'http://kreftjs.com').replace(/\/+$
|
|
|
112
112
|
<div class="info-list">
|
|
113
113
|
<div class="info-item">
|
|
114
114
|
<span class="info-label">Framework Engine</span>
|
|
115
|
-
<span class="info-value">Kreft {Kreftjs.version || '0.0.
|
|
115
|
+
<span class="info-value">Kreft {Kreftjs.version || '0.0.14-beta'}</span>
|
|
116
116
|
</div>
|
|
117
117
|
<div class="info-item">
|
|
118
118
|
<span class="info-label">Active Database</span>
|
|
@@ -80,7 +80,10 @@ action copy() {
|
|
|
80
80
|
<section class="hero-grid">
|
|
81
81
|
<!-- Left Column: Copy, Headlines & CTA Badges -->
|
|
82
82
|
<div class="hero-copy">
|
|
83
|
-
<
|
|
83
|
+
<div class="hero-meta">
|
|
84
|
+
<p class="version-pill"><span class="version-dot" aria-hidden="true"></span>Kreft v{Kreftjs.version}</p>
|
|
85
|
+
<p class="hero-kicker">JavaScript framework · Laravel-friendly</p>
|
|
86
|
+
</div>
|
|
84
87
|
<h1 class="hero-headline" aria-label="Build full-stack apps in plain words.">
|
|
85
88
|
<span aria-hidden="true">{for w in rotWord key w}<span class="rotator">{w}</span>{/for}</span>
|
|
86
89
|
</h1>
|
|
@@ -88,7 +91,7 @@ action copy() {
|
|
|
88
91
|
<p class="hero-tagline">Built for scale, speed, and safety.</p>
|
|
89
92
|
|
|
90
93
|
<p class="hero-summary">
|
|
91
|
-
Kreft is a zero-dependency, full-stack JavaScript framework featuring its own component language, built-in SQL ORM, state management, migrations, auth, queues, and desktop packaging—all self-contained with no build steps required.
|
|
94
|
+
Kreft is a zero-dependency, full-stack JavaScript framework featuring its own component language, built-in SQL ORM, state management, migrations, auth, queues, and desktop packaging—all self-contained with no build steps required. Routes, controllers, models, migrations and commands will feel familiar if you know Laravel.
|
|
92
95
|
</p>
|
|
93
96
|
|
|
94
97
|
<!-- CTA Buttons -->
|
|
@@ -104,6 +107,7 @@ action copy() {
|
|
|
104
107
|
<span class="badge highlight">✓ 0 Dependencies</span>
|
|
105
108
|
<span class="badge">✓ Built-in SQL ORM</span>
|
|
106
109
|
<span class="badge">✓ Authentication & Gates</span>
|
|
110
|
+
<span class="badge">✓ Laravel-friendly</span>
|
|
107
111
|
<span class="badge">✓ TypeScript & JS Choice</span>
|
|
108
112
|
</div>
|
|
109
113
|
</div>
|
|
@@ -227,7 +231,7 @@ action copy() {
|
|
|
227
231
|
<style scoped>
|
|
228
232
|
.welcome-container {
|
|
229
233
|
position: relative;
|
|
230
|
-
overflow:
|
|
234
|
+
overflow-x: clip; /* the glow circles may reach past the screen edge without making the page scroll sideways */
|
|
231
235
|
width: 100%;
|
|
232
236
|
max-width: calc(var(--container, 1240px) + var(--container-pad, 28px) * 2);
|
|
233
237
|
margin: 0 auto;
|
|
@@ -294,7 +298,7 @@ action copy() {
|
|
|
294
298
|
display: inline-flex;
|
|
295
299
|
align-items: center;
|
|
296
300
|
gap: 8px;
|
|
297
|
-
margin: 0
|
|
301
|
+
margin: 0;
|
|
298
302
|
padding: 5px 12px;
|
|
299
303
|
font-family: var(--font-mono, ui-monospace, monospace);
|
|
300
304
|
font-size: 12.5px;
|
|
@@ -305,6 +309,8 @@ action copy() {
|
|
|
305
309
|
border-radius: 9999px;
|
|
306
310
|
}
|
|
307
311
|
.version-dot { width: 7px; height: 7px; border-radius: 50%; background: #10b981; }
|
|
312
|
+
.hero-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 0 0 20px; }
|
|
313
|
+
.hero-kicker { margin: 0; padding: 5px 12px; font-size: 12.5px; font-weight: 600; letter-spacing: 0.01em; color: var(--muted); border: 1px dashed var(--border); border-radius: 9999px; }
|
|
308
314
|
|
|
309
315
|
/* the changing headline: each line slides in from the right (a marquee) with a flash of red light, then settles */
|
|
310
316
|
.rotator { display: block; animation: rotator-flash 0.9s ease-out; }
|
|
@@ -413,6 +419,7 @@ action copy() {
|
|
|
413
419
|
|
|
414
420
|
/* Code Terminal Window */
|
|
415
421
|
.terminal-card {
|
|
422
|
+
min-width: 0;
|
|
416
423
|
background: #0f172a;
|
|
417
424
|
border-radius: 18px;
|
|
418
425
|
box-shadow: 0 25px 60px -15px rgba(0, 0, 0, 0.4), 0 0 1px 1px rgba(255, 255, 255, 0.08);
|
|
@@ -636,24 +643,64 @@ dd { margin: 0; color: var(--muted); }
|
|
|
636
643
|
.term button { background: var(--primary); color: var(--primary-foreground); border: none; padding: 6px 12px; border-radius: 4px; font-size: 12px; cursor: pointer; }
|
|
637
644
|
.begin p { color: var(--muted); max-width: 40em; }
|
|
638
645
|
|
|
646
|
+
@media (max-width: 1100px) {
|
|
647
|
+
.hero-grid { gap: 32px; }
|
|
648
|
+
.floating-preview { width: 290px; }
|
|
649
|
+
}
|
|
639
650
|
@media (max-width: 960px) {
|
|
640
|
-
|
|
641
|
-
.hero-
|
|
642
|
-
.hero-visual {
|
|
643
|
-
|
|
644
|
-
.
|
|
651
|
+
/* minmax(0, 1fr): the code window may scroll inside itself, it must not make the whole page wider than the screen */
|
|
652
|
+
.hero-grid { grid-template-columns: minmax(0, 1fr); gap: 40px; }
|
|
653
|
+
.hero-copy, .hero-visual, .terminal-card { min-width: 0; max-width: 100%; }
|
|
654
|
+
/* the live card goes under the code window (a column), not beside it: two 100% wide boxes in one row squeezed both to nothing */
|
|
655
|
+
.hero-visual { flex-direction: column; align-items: center; gap: 20px; width: 100%; padding: 0; }
|
|
656
|
+
.terminal-card, .floating-preview { width: 100%; max-width: 560px; }
|
|
657
|
+
.floating-preview { position: static; margin: 0; right: 0; bottom: 0; }
|
|
645
658
|
.inside ul { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
646
659
|
}
|
|
647
660
|
@media (max-width: 640px) {
|
|
648
|
-
.welcome-container { padding:
|
|
649
|
-
.
|
|
650
|
-
.
|
|
651
|
-
.
|
|
652
|
-
.
|
|
653
|
-
.
|
|
654
|
-
.
|
|
661
|
+
.welcome-container { padding: 0 max(14px, env(safe-area-inset-right)) 28px max(14px, env(safe-area-inset-left)); }
|
|
662
|
+
.site-bar { height: 52px; }
|
|
663
|
+
.site-nav a { padding: 8px 10px; font-size: 13px; }
|
|
664
|
+
.site-theme { height: 32px; width: 32px; }
|
|
665
|
+
.hero-meta { gap: 6px; margin-bottom: 14px; }
|
|
666
|
+
.hero-grid { gap: 28px; padding-bottom: 36px; }
|
|
667
|
+
.hero-headline { font-size: 26px; min-height: 3.3em; letter-spacing: -0.03em; }
|
|
668
|
+
.hero-tagline { font-size: 17px; margin: 10px 0 10px; }
|
|
669
|
+
.hero-summary { font-size: 14px; line-height: 1.55; margin-bottom: 20px; }
|
|
670
|
+
/* the main button on its own line, the other two side by side */
|
|
671
|
+
.cta-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; width: 100%; margin-bottom: 18px; }
|
|
672
|
+
.pill-btn.primary { grid-column: 1 / -1; }
|
|
673
|
+
.pill-btn { width: 100%; min-height: 42px; padding: 8px 14px; font-size: 14px; text-align: center; }
|
|
674
|
+
.feature-badges { gap: 5px; }
|
|
675
|
+
.badge { font-size: 11px; padding: 4px 9px; }
|
|
676
|
+
.hero-visual { gap: 14px; }
|
|
677
|
+
.terminal-card { border-radius: 14px; }
|
|
678
|
+
.terminal-code { font-size: 11.5px; line-height: 1.6; padding: 14px 14px 30px; }
|
|
679
|
+
.floating-preview { padding: 14px; border-radius: 14px; }
|
|
680
|
+
.preview-name { font-size: 17px; }
|
|
681
|
+
.preview-metrics { display: none; }
|
|
682
|
+
.language, .inside, .begin { padding: 28px 0; }
|
|
683
|
+
.language h2, .inside h2, .begin h2 { font-size: 19px; margin-bottom: 14px; }
|
|
684
|
+
/* the 12 words and the 9 parts in two columns, not one long list */
|
|
685
|
+
dl { grid-template-columns: 1fr 1fr; column-gap: 16px; font-size: 13px; }
|
|
686
|
+
dl div { grid-template-columns: 1fr; gap: 1px; padding: 8px 0; }
|
|
687
|
+
dl dd { font-size: 12px; line-height: 1.35; }
|
|
688
|
+
.inside ul { grid-template-columns: 1fr 1fr; }
|
|
689
|
+
.inside a { padding: 12px; gap: 3px; }
|
|
690
|
+
.inside a strong { font-size: 13px; }
|
|
691
|
+
.inside a span { font-size: 12px; line-height: 1.35; }
|
|
692
|
+
.term { max-width: 100%; }
|
|
693
|
+
.term code { min-width: 0; overflow-x: auto; white-space: nowrap; font-size: 12.5px; }
|
|
694
|
+
.begin p { font-size: 13px; }
|
|
695
|
+
.site-foot { flex-wrap: wrap; gap: 6px 14px; padding-top: 16px; font-size: 12px; }
|
|
696
|
+
}
|
|
697
|
+
@media (max-width: 380px) {
|
|
698
|
+
.hero-headline { font-size: 24px; min-height: 4.3em; }
|
|
699
|
+
.version-pill, .hero-kicker { font-size: 11px; padding: 4px 10px; }
|
|
700
|
+
.terminal-code { font-size: 10.5px; }
|
|
701
|
+
.preview-badges { flex-wrap: wrap; }
|
|
702
|
+
}
|
|
703
|
+
@media (max-width: 340px) {
|
|
655
704
|
.inside ul { grid-template-columns: 1fr; }
|
|
656
|
-
dl { grid-template-columns: 1fr; }
|
|
657
|
-
dl div { grid-template-columns: 1fr; gap: 4px; }
|
|
658
705
|
}
|
|
659
706
|
</style>
|
|
@@ -118,7 +118,7 @@ state docs = (Kreftjs.env.PUBLIC_DOCS_URL || 'http://kreftjs.com').replace(/\/+$
|
|
|
118
118
|
<div class="hero-badges">
|
|
119
119
|
<span class="badge-exception">{currentTitle}</span>
|
|
120
120
|
<span class="badge-env">Node.js {typeof process !== 'undefined' ? process.version : 'v22.0.0'}</span>
|
|
121
|
-
<span class="badge-env">Kreft v0.0.
|
|
121
|
+
<span class="badge-env">Kreft v0.0.14-beta</span>
|
|
122
122
|
</div>
|
|
123
123
|
<h1 class="hero-error-message">{currentMessage}</h1>
|
|
124
124
|
</div>
|