clippa 1.0.2 → 1.0.9

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 CHANGED
@@ -5,7 +5,13 @@
5
5
  <h1 align="center">Clippa</h1>
6
6
 
7
7
  <p align="center">
8
- A small, private macOS clipboard app built around one shortcut: press Command-Shift-W, choose a clip, paste.
8
+ Private, keyboard-first clipboard history for macOS.
9
+ </p>
10
+
11
+ <p align="center">
12
+ <a href="https://github.com/Vaniawl/Clippa/releases/latest"><img alt="Latest release" src="https://img.shields.io/github/v/release/Vaniawl/Clippa?style=flat-square"></a>
13
+ <img alt="macOS 26+" src="https://img.shields.io/badge/macOS-26%2B-111111?style=flat-square">
14
+ <a href="LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/license-MIT-087f78?style=flat-square"></a>
9
15
  </p>
10
16
 
11
17
  <p align="center">
@@ -22,36 +28,33 @@
22
28
 
23
29
  ## Install Clippa
24
30
 
25
- Install from npm:
31
+ Recommended:
26
32
 
27
33
  ```bash
28
- npx clippa
34
+ brew tap Vaniawl/clippa
35
+ brew install clippa
29
36
  ```
30
37
 
31
- Or install the command globally:
38
+ Update later with:
32
39
 
33
40
  ```bash
34
- npm install -g clippa
35
- clippa
41
+ brew update
42
+ brew upgrade clippa
36
43
  ```
37
44
 
38
- GitHub install is also available:
45
+ You can also install the current version directly from GitHub:
39
46
 
40
47
  ```bash
41
- npx github:Vaniawl/Clippa
48
+ npx --yes github:Vaniawl/Clippa#main
42
49
  ```
43
50
 
44
- Do not use `npx install clippa`: npm treats `install` as the package name in that command. The correct npx command is `npx clippa`.
45
-
46
51
  After it opens, grant Accessibility access when macOS asks. Clippa needs that permission only to paste the selected item into the app where your cursor is already active.
47
52
 
48
53
  Useful installer options:
49
54
 
50
55
  ```bash
51
- npx clippa -- --no-open
52
- npx clippa -- --install-dir ~/Applications
53
- npx github:Vaniawl/Clippa -- --no-open
54
- npx github:Vaniawl/Clippa -- --install-dir ~/Applications
56
+ npx --yes github:Vaniawl/Clippa#main --no-open
57
+ npx --yes github:Vaniawl/Clippa#main --install-dir ~/Applications
55
58
  ```
56
59
 
57
60
  You can also download `Clippa.app.zip` from the latest GitHub release, unzip it, move `Clippa.app` to `/Applications`, and open it.
@@ -59,17 +62,24 @@ You can also download `Clippa.app.zip` from the latest GitHub release, unzip it,
59
62
  ## How It Works
60
63
 
61
64
  - Runs quietly in the background as a menu-bar app.
62
- - Press `Command-Shift-W` while your cursor is in a text field.
65
+ - Press `Command-Shift-V` anywhere to open clipboard history.
63
66
  - Use `Up` / `Down` to choose a clipboard item.
67
+ - Use `Left` / `Right` to switch between clipboard filters.
68
+ - Press `Command-P` to pin or unpin the selected item.
64
69
  - Press `Enter` or click an item to paste it.
70
+ - Keeps the newest copied item at the top and shows pinned items only in the Pinned filter.
71
+ - Optionally adds one space after pasted text or links.
72
+ - Use the context menu to copy, pin, delete, open, or Quick Look an item.
73
+ - Drag text, links, images, and files directly into other apps.
65
74
  - Press `Esc` or click outside the panel to close it.
66
75
  - Stores recent text, links, images, and file references locally on your Mac.
76
+ - Supports configurable retention, history limits, excluded apps, and Launch at Login.
67
77
 
68
78
  ## Privacy
69
79
 
70
80
  Clippa does not upload clipboard contents, does not use analytics, and does not require an account. Clipboard history is stored only on your Mac and encrypted locally with a per-user AES-GCM key file in Application Support. Clippa does not read or write Keychain items at startup, so locally signed reinstall builds do not trigger Keychain password prompts.
71
81
 
72
- Accessibility permission is only used to confirm there is an editable field under the cursor and to paste the selected clip into that frontmost app.
82
+ Accessibility permission is only used to restore focus and paste the selected clip into the app that was active before Clippa opened. If automatic paste is unavailable, Clippa keeps the item on the system clipboard and shows a direct link to the required permission.
73
83
 
74
84
  ## Requirements
75
85
 
@@ -91,15 +101,6 @@ The packaged app is written to:
91
101
  outputs/Clippa.app.zip
92
102
  ```
93
103
 
94
- ## npm Publish
95
-
96
- The npm installer package is prepared as `clippa`. Publishing to npm requires an authenticated npm session:
97
-
98
- ```bash
99
- npm adduser
100
- npm publish --access public
101
- ```
102
-
103
104
  ## Update From Git
104
105
 
105
106
  For an existing checkout:
@@ -111,6 +112,6 @@ git pull origin main
111
112
  ## Production Notes
112
113
 
113
114
  - Bundle identifier: `com.ivandovhosheia.Clippa`
114
- - Version: `1.0.0`
115
+ - Version: `1.0.9`
115
116
  - Release builds use hardened runtime.
116
- - Recent history is limited to 100 active items and stored only on this Mac.
117
+ - History retention and item limits are configurable; the default is 100 items for one week.
@@ -10,7 +10,7 @@ const appName = "Clippa";
10
10
  const bundleIdentifier = "com.ivandovhosheia.Clippa";
11
11
  const localZipPath = path.resolve(__dirname, "../outputs/Clippa.app.zip");
12
12
  const packageJson = require("../package.json");
13
- const defaultZipUrl = "https://github.com/Vaniawl/Clippa/releases/download/v1.0.0/Clippa.app.zip";
13
+ const defaultZipUrl = "https://github.com/Vaniawl/Clippa/releases/download/v1.0.9/Clippa.app.zip";
14
14
  const zipUrl = process.env.CLIPPA_ZIP_URL || defaultZipUrl;
15
15
 
16
16
  function usage() {
@@ -28,7 +28,7 @@ Options:
28
28
  --help Show this help.
29
29
 
30
30
  The installer copies Clippa.app to /Applications when possible, otherwise to ~/Applications.
31
- Press Command-Shift-W in a text field to open Clippa.
31
+ Press Command-Shift-V in a text field to open Clippa.
32
32
  `);
33
33
  }
34
34
 
@@ -189,7 +189,7 @@ async function main() {
189
189
  if (!options.noOpen) {
190
190
  console.log("Opening Clippa...");
191
191
  run("/usr/bin/open", [installPath]);
192
- console.log("Press Command-Shift-W in a text field to open Clippa. Grant Accessibility access if macOS asks.");
192
+ console.log("Press Command-Shift-V in a text field to open Clippa. Grant Accessibility access if macOS asks.");
193
193
  }
194
194
  } finally {
195
195
  fs.rmSync(tempDir, { recursive: true, force: true });
Binary file
@@ -1,39 +1,65 @@
1
- <svg width="1440" height="900" viewBox="0 0 1440 900" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <rect width="1440" height="900" fill="#111414"/>
3
- <rect x="340" y="164" width="760" height="520" rx="30" fill="#181C1D"/>
4
- <rect x="340.5" y="164.5" width="759" height="519" rx="29.5" stroke="#3A4242"/>
5
- <filter id="shadow" x="300" y="124" width="840" height="600" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse">
6
- <feDropShadow dx="0" dy="26" stdDeviation="28" flood-color="#000000" flood-opacity=".34"/>
1
+ <svg width="1600" height="900" viewBox="0 0 1600 900" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="1600" height="900" fill="#0E1011"/>
3
+ <filter id="shadow" x="535" y="90" width="1030" height="700" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse">
4
+ <feDropShadow dx="0" dy="34" stdDeviation="38" flood-color="#000000" flood-opacity=".52"/>
7
5
  </filter>
8
6
  <g filter="url(#shadow)">
9
- <rect x="340" y="164" width="760" height="520" rx="30" fill="#181C1D"/>
10
- <rect x="340.5" y="164.5" width="759" height="519" rx="29.5" stroke="#3A4242"/>
7
+ <rect x="610" y="150" width="850" height="560" rx="34" fill="#202223" fill-opacity=".94"/>
8
+ <rect x="610.5" y="150.5" width="849" height="559" rx="33.5" stroke="#FFFFFF" stroke-opacity=".14"/>
11
9
  </g>
12
- <circle cx="388" cy="221" r="24" fill="#0A84FF"/>
13
- <path d="M379 230l29-29a10 10 0 0 1 14 14l-32 32a17 17 0 0 1-24-24l31-31" stroke="#06131F" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
14
- <text x="430" y="215" fill="#F4F7F5" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="25" font-weight="760">Clippa</text>
15
- <text x="430" y="244" fill="#9BA6A2" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="16" font-weight="620">4 Items</text>
16
- <line x1="380" y1="282" x2="1060" y2="282" stroke="#303838"/>
17
- <rect x="380" y="314" width="680" height="72" rx="14" fill="#12365B"/>
18
- <rect x="380.5" y="314.5" width="679" height="71" rx="13.5" stroke="#0A84FF" stroke-opacity=".62"/>
19
- <rect x="402" y="330" width="42" height="42" rx="10" fill="#20364F"/>
20
- <path d="M414 361h20M414 351h25M414 341h18" stroke="#B6C2C9" stroke-width="4" stroke-linecap="round"/>
21
- <text x="464" y="346" fill="#F5F8F6" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="21" font-weight="720">Release checklist</text>
22
- <text x="464" y="371" fill="#B1BEC8" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="15" font-weight="610">Text / Notes</text>
23
- <rect x="380" y="398" width="680" height="72" rx="14" fill="#202526"/>
24
- <rect x="402" y="414" width="42" height="42" rx="10" fill="#143C38"/>
25
- <path d="M413 447l14-17 10 12 6-7 13 17h-43v-5z" fill="#64D2C8"/>
26
- <text x="464" y="430" fill="#F5F8F6" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="21" font-weight="720">Clipboard image</text>
27
- <text x="464" y="455" fill="#98A4A0" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="15" font-weight="610">1280 x 720 / 482 KB / Preview</text>
28
- <rect x="380" y="482" width="680" height="72" rx="14" fill="#202526"/>
29
- <rect x="402" y="498" width="42" height="42" rx="10" fill="#223B58"/>
30
- <path d="M413 522c7-9 13-9 20 0s13 9 20 0" stroke="#8EC5FF" stroke-width="5" stroke-linecap="round"/>
31
- <text x="464" y="514" fill="#F5F8F6" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="21" font-weight="720">https://example.com/research</text>
32
- <text x="464" y="539" fill="#98A4A0" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="15" font-weight="610">URL / Safari</text>
33
- <rect x="380" y="566" width="680" height="72" rx="14" fill="#202526"/>
34
- <rect x="402" y="582" width="42" height="42" rx="10" fill="#3A3324"/>
35
- <path d="M414 595h18l8 8v20h-26v-28z" stroke="#FFD479" stroke-width="4" stroke-linejoin="round"/>
36
- <text x="464" y="598" fill="#F5F8F6" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="21" font-weight="720">invoice.pdf</text>
37
- <text x="464" y="623" fill="#98A4A0" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="15" font-weight="610">File / Finder</text>
38
- <text x="380" y="724" fill="#75817D" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="650">Command-Shift-W opens Clippa. Enter or click pastes the selected item.</text>
10
+
11
+ <image href="app-icon.png" x="650" y="188" width="46" height="46"/>
12
+ <text x="714" y="207" fill="#F5F5F3" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="25" font-weight="700">Clippa</text>
13
+ <text x="714" y="231" fill="#A2A6A5" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="15" font-weight="500">4 Items</text>
14
+ <rect x="1328" y="197" width="84" height="28" rx="14" fill="#0A84FF" fill-opacity=".14"/>
15
+ <path d="M1344 211l4-5 4 5v6h-8v-6z" fill="#6DB8FF"/>
16
+ <text x="1360" y="216" fill="#6DB8FF" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="14" font-weight="650">2</text>
17
+
18
+ <rect x="650" y="255" width="762" height="42" rx="11" fill="#FFFFFF" fill-opacity=".07"/>
19
+ <circle cx="671" cy="276" r="6" stroke="#9DA3A2" stroke-width="2"/>
20
+ <path d="M676 281l5 5" stroke="#9DA3A2" stroke-width="2" stroke-linecap="round"/>
21
+ <text x="693" y="281" fill="#929897" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="15">Search clipboard</text>
22
+
23
+ <g font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13" font-weight="600">
24
+ <rect x="650" y="314" width="70" height="30" rx="15" fill="#0A84FF"/>
25
+ <text x="674" y="334" fill="white">All</text>
26
+ <rect x="729" y="314" width="90" height="30" rx="15" fill="#FFFFFF" fill-opacity=".07"/>
27
+ <text x="749" y="334" fill="#D6D9D8">Pinned</text>
28
+ <rect x="828" y="314" width="75" height="30" rx="15" fill="#FFFFFF" fill-opacity=".07"/>
29
+ <text x="849" y="334" fill="#D6D9D8">Text</text>
30
+ <rect x="912" y="314" width="78" height="30" rx="15" fill="#FFFFFF" fill-opacity=".07"/>
31
+ <text x="932" y="334" fill="#D6D9D8">Links</text>
32
+ <rect x="999" y="314" width="90" height="30" rx="15" fill="#FFFFFF" fill-opacity=".07"/>
33
+ <text x="1018" y="334" fill="#D6D9D8">Images</text>
34
+ <rect x="1098" y="314" width="76" height="30" rx="15" fill="#FFFFFF" fill-opacity=".07"/>
35
+ <text x="1119" y="334" fill="#D6D9D8">Files</text>
36
+ </g>
37
+
38
+ <rect x="650" y="362" width="762" height="68" rx="13" fill="#0A84FF" fill-opacity=".15"/>
39
+ <rect x="650.5" y="362.5" width="761" height="67" rx="12.5" stroke="#0A84FF" stroke-opacity=".34"/>
40
+ <rect x="663" y="375" width="42" height="42" rx="9" fill="#FFFFFF" fill-opacity=".08"/>
41
+ <path d="M674 403h20M674 393h24M674 383h17" stroke="#E6E8E7" stroke-width="3" stroke-linecap="round"/>
42
+ <text x="720" y="391" fill="#F7F8F7" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="650">Release checklist</text>
43
+ <text x="720" y="414" fill="#AAB0AE" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13">Text · Notes · now</text>
44
+ <text x="1380" y="402" fill="#9AA09E" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="17">↵</text>
45
+
46
+ <rect x="650" y="438" width="762" height="68" rx="13" fill="#FFFFFF" fill-opacity=".035"/>
47
+ <rect x="663" y="451" width="42" height="42" rx="9" fill="#64D2C8" fill-opacity=".12"/>
48
+ <path d="M674 482l11-13 8 9 5-5 8 12h-32v-3z" fill="#64D2C8"/>
49
+ <text x="720" y="467" fill="#F7F8F7" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="650">Clipboard image</text>
50
+ <text x="720" y="490" fill="#AAB0AE" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13">Image · 1280 × 720 · Preview</text>
51
+
52
+ <rect x="650" y="514" width="762" height="68" rx="13" fill="#FFFFFF" fill-opacity=".035"/>
53
+ <rect x="663" y="527" width="42" height="42" rx="9" fill="#0A84FF" fill-opacity=".12"/>
54
+ <path d="M674 549c5-7 10-7 15 0s10 7 15 0" stroke="#69B4FF" stroke-width="4" stroke-linecap="round"/>
55
+ <text x="720" y="543" fill="#F7F8F7" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="650">https://example.com/research</text>
56
+ <text x="720" y="566" fill="#AAB0AE" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13">URL · Safari · 2 min ago</text>
57
+
58
+ <rect x="650" y="590" width="762" height="68" rx="13" fill="#FFFFFF" fill-opacity=".035"/>
59
+ <rect x="663" y="603" width="42" height="42" rx="9" fill="#FFCC66" fill-opacity=".12"/>
60
+ <path d="M675 611h17l8 8v18h-25v-26z" stroke="#FFD479" stroke-width="3" stroke-linejoin="round"/>
61
+ <text x="720" y="619" fill="#F7F8F7" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="650">invoice.pdf</text>
62
+ <text x="720" y="642" fill="#AAB0AE" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13">File · Finder · yesterday</text>
63
+
64
+ <text x="610" y="772" fill="#7F8583" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="16" font-weight="600">⇧⌘V to open · ↑↓ to select · ←→ to filter · Return to paste</text>
39
65
  </svg>
Binary file
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "clippa",
3
- "version": "1.0.2",
4
- "description": "Installer for Clippa, a private macOS paste panel.",
3
+ "version": "1.0.9",
4
+ "description": "Installer for Clippa, a private keyboard-first clipboard history app for macOS.",
5
5
  "bin": {
6
6
  "install-clippa": "bin/install-clippa.js",
7
7
  "clippa": "bin/install-clippa.js"
@@ -28,6 +28,9 @@
28
28
  "keywords": [
29
29
  "macos",
30
30
  "clipboard",
31
+ "clipboard-manager",
32
+ "clipboard-history",
33
+ "privacy",
31
34
  "swiftui",
32
35
  "productivity"
33
36
  ],