litura-app 0.3.0 → 0.3.2

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/CHANGELOG.md CHANGED
@@ -5,6 +5,14 @@ number carries breaking changes.
5
5
 
6
6
  ## Unreleased
7
7
 
8
+ ## 0.3.2 — 2026-09-07
9
+
10
+ - Moved the Slop Score next to the settings control in the editor header.
11
+
12
+ ## 0.3.1 — 2026-09-07
13
+
14
+ - The update badge now copies `npx litura-app` instead of opening a changelog, so the next update command is ready to paste.
15
+
8
16
  ## 0.3.0 — 2026-09-07
9
17
 
10
18
  - Review remarks stay beside the passage they describe without shifting the draft when opened or clicked.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "litura-app",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "A local AI-assisted editor for sharper, more human writing",
5
5
  "keywords": [
6
6
  "writing",
package/public/app.js CHANGED
@@ -18566,10 +18566,21 @@
18566
18566
  updateBadge.hidden = !stale;
18567
18567
  if (stale) {
18568
18568
  updateBadge.textContent = `${latest} available`;
18569
- updateBadge.title = `Running ${current}. Restart with npx to pick it up; a global install needs npm i -g.`;
18569
+ updateBadge.title = "Copy npx litura-app to update";
18570
18570
  }
18571
18571
  updateStatus.textContent = error ? `Running ${current} \u2014 npm could not be reached.` : stale ? `Running ${current}; npm publishes ${latest}.` : latest ? `Running ${current} \u2014 the published version.` : `Running ${current}.`;
18572
18572
  }
18573
+ updateBadge.addEventListener("click", async () => {
18574
+ if (updateBadge.hidden) return;
18575
+ const command2 = "npx litura-app";
18576
+ try {
18577
+ await navigator.clipboard.writeText(command2);
18578
+ updateBadge.textContent = `Copied: ${command2}`;
18579
+ } catch {
18580
+ updateBadge.textContent = `Run: ${command2}`;
18581
+ }
18582
+ updateBadge.title = command2;
18583
+ });
18573
18584
  async function refreshUpdate({ force = false } = {}) {
18574
18585
  let cached = null;
18575
18586
  try {
package/public/index.html CHANGED
@@ -33,24 +33,23 @@
33
33
  <button type="button" id="file-history">History</button>
34
34
  </div>
35
35
  <span id="save-status" role="status"></span>
36
- <button type="button" class="style-score" id="style-score" hidden title="Local slop score">
37
- <span class="style-score-label">Slop Score</span>
38
- <span id="style-score-value"></span>
39
- </button>
40
- <!-- Only ever shown when the writer opted into the check and a newer
41
- version exists. It links to the changelog, not to an installer:
42
- updating is a command the writer runs. -->
43
- <a class="update-badge" id="update-badge" hidden
44
- href="https://github.com/vadimchirkov/litura/blob/main/CHANGELOG.md"
45
- target="_blank" rel="noreferrer"></a>
46
- <button class="settings-open" id="settings-open" title="Model and access" aria-label="Model and access">
47
- <svg viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round">
48
- <path d="M3 5h14M3 10h14M3 15h14"/>
49
- <circle cx="7" cy="5" r="1.5" fill="var(--surface)"/>
50
- <circle cx="13" cy="10" r="1.5" fill="var(--surface)"/>
51
- <circle cx="9" cy="15" r="1.5" fill="var(--surface)"/>
52
- </svg>
53
- </button>
36
+ <!-- Only shown when a newer version exists. Clicking it copies the
37
+ update command; the running process is never replaced in place. -->
38
+ <button type="button" class="update-badge" id="update-badge" hidden></button>
39
+ <div class="header-actions">
40
+ <button type="button" class="style-score" id="style-score" hidden title="Local slop score">
41
+ <span class="style-score-label">Slop Score</span>
42
+ <span id="style-score-value"></span>
43
+ </button>
44
+ <button class="settings-open" id="settings-open" title="Model and access" aria-label="Model and access">
45
+ <svg viewBox="0 0 20 20" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round">
46
+ <path d="M3 5h14M3 10h14M3 15h14"/>
47
+ <circle cx="7" cy="5" r="1.5" fill="var(--surface)"/>
48
+ <circle cx="13" cy="10" r="1.5" fill="var(--surface)"/>
49
+ <circle cx="9" cy="15" r="1.5" fill="var(--surface)"/>
50
+ </svg>
51
+ </button>
52
+ </div>
54
53
  </div>
55
54
  <div id="editor-wrapper"></div>
56
55
  <!-- Remarks about a place in the text stand next to that place. Below
package/public/style.css CHANGED
@@ -485,7 +485,8 @@ html, body {
485
485
  transition: background var(--motion, .12s) ease, color .12s ease;
486
486
  }
487
487
 
488
- .settings-open { margin-left: auto; }
488
+ .header-actions { display: inline-flex; align-items: center; gap: 8px; margin-left: auto; }
489
+ .settings-open { margin-left: 0; }
489
490
  .settings-open svg { width: 17px; height: 17px; }
490
491
 
491
492
  .icon-btn:hover,
@@ -497,7 +498,7 @@ html, body {
497
498
  /* Local slop score — computed in the browser, so it updates as you type.
498
499
  Click it for the words behind the number. */
499
500
  .style-score {
500
- margin-left: auto;
501
+ margin-left: 0;
501
502
  padding: 0;
502
503
  border: 0;
503
504
  background: none;
@@ -517,12 +518,15 @@ html, body {
517
518
  mid-sentence; this must not compete with the draft. */
518
519
  .update-badge {
519
520
  padding: 2px 8px;
521
+ border: 0;
520
522
  border-radius: var(--r-pill);
521
523
  background: var(--fill);
522
524
  color: var(--text-2);
525
+ font: inherit;
523
526
  font-size: 12px;
524
527
  text-decoration: none;
525
528
  white-space: nowrap;
529
+ cursor: pointer;
526
530
  }
527
531
 
528
532
  .update-badge:hover { background: var(--fill-hover); color: var(--text); }