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 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.12-beta
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
@@ -1,4 +1,4 @@
1
- // Type definitions for Kreft 0.0.12-beta
1
+ // Type definitions for Kreft 0.0.14-beta
2
2
  // Use from TypeScript or for editor hints in plain JavaScript (// @ts-check).
3
3
 
4
4
  export interface Signal<T> { value: T }
package/kreftjs.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Kreft v0.0.12-beta — reactive by nature
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.12-beta';
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.12-beta",
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.12-beta'}</span>
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.12-beta'}</code></td></tr>
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,4 +1,4 @@
1
- // Type definitions for Kreft 0.0.12-beta
1
+ // Type definitions for Kreft 0.0.14-beta
2
2
  // Use from TypeScript or for editor hints in plain JavaScript (// @ts-check).
3
3
 
4
4
  export interface Signal<T> { value: T }
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Kreft v0.0.12-beta — reactive by nature
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.12-beta';
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.12-beta'}</span>
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
- <p class="version-pill"><span class="version-dot" aria-hidden="true"></span>Kreft v{Kreftjs.version}</p>
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 &amp; Gates</span>
110
+ <span class="badge">✓ Laravel-friendly</span>
107
111
  <span class="badge">✓ TypeScript &amp; 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: visible;
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 0 20px;
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
- .hero-grid { grid-template-columns: 1fr; gap: 40px; }
641
- .hero-copy { max-width: 100%; }
642
- .hero-visual { justify-content: center; width: 100%; padding: 0; }
643
- .terminal-card { max-width: 100%; }
644
- .floating-preview { position: static; width: 100%; max-width: 100%; margin-top: 20px; right: 0; bottom: 0; }
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: 24px 0 48px; }
649
- .hero-headline { font-size: 32px; }
650
- .hero-tagline { font-size: 20px; }
651
- .cta-actions { flex-direction: column; width: 100%; }
652
- .pill-btn { width: 100%; text-align: center; }
653
- .feature-badges { gap: 6px; }
654
- .badge { font-size: 11.5px; padding: 5px 10px; }
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.12-beta</span>
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>