storeshot 0.1.0

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.
Files changed (151) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/CONTRIBUTING.md +75 -0
  3. package/LICENSE +21 -0
  4. package/README.md +142 -0
  5. package/SECURITY.md +25 -0
  6. package/THIRD_PARTY_LICENSES.txt +668 -0
  7. package/THIRD_PARTY_NOTICES.md +93 -0
  8. package/dist/cli.js +1458 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/ui/artwork/tabler/LICENSE +21 -0
  11. package/dist/ui/artwork/tabler/README.md +23 -0
  12. package/dist/ui/artwork/tabler/filled/grid-pattern.svg +13 -0
  13. package/dist/ui/artwork/tabler/filled/laurel-wreath-1.svg +13 -0
  14. package/dist/ui/artwork/tabler/filled/laurel-wreath-2.svg +13 -0
  15. package/dist/ui/artwork/tabler/filled/laurel-wreath-3.svg +13 -0
  16. package/dist/ui/artwork/tabler/filled/laurel-wreath.svg +13 -0
  17. package/dist/ui/artwork/tabler/filled/sparkles.svg +15 -0
  18. package/dist/ui/artwork/tabler/filled/stars.svg +15 -0
  19. package/dist/ui/artwork/tabler/outline/scribble.svg +19 -0
  20. package/dist/ui/artwork/tabler/outline/underline.svg +20 -0
  21. package/dist/ui/assets/AssetsView-D0lbK5rm.js +1 -0
  22. package/dist/ui/assets/SetEditor-BBUlgGT0.js +440 -0
  23. package/dist/ui/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  24. package/dist/ui/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  25. package/dist/ui/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  26. package/dist/ui/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  27. package/dist/ui/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  28. package/dist/ui/assets/index-DPDaBFld.js +10 -0
  29. package/dist/ui/assets/index-DfZBqsD3.css +2 -0
  30. package/dist/ui/assets/shared-BiRg4I01.js +1 -0
  31. package/dist/ui/index.html +14 -0
  32. package/dist/ui/licenses/geist-OFL-1.1.txt +93 -0
  33. package/dist/ui/mockup-bundles/frameup-free/LICENSE +21 -0
  34. package/dist/ui/mockup-bundles/frameup-free/README.md +12 -0
  35. package/dist/ui/mockup-bundles/frameup-free/assets/imac-pro.png +0 -0
  36. package/dist/ui/mockup-bundles/frameup-free/assets/imac-retina.png +0 -0
  37. package/dist/ui/mockup-bundles/frameup-free/assets/imac.png +0 -0
  38. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-air-gold.png +0 -0
  39. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-air-silver.png +0 -0
  40. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-air-space-grey.png +0 -0
  41. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-gold.png +0 -0
  42. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-mini-gold.png +0 -0
  43. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-mini-silver.png +0 -0
  44. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-mini-space-grey.png +0 -0
  45. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-pro-11-silver-landscape.png +0 -0
  46. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-pro-11-silver-portrait.png +0 -0
  47. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-pro-11-space-gray-landscape.png +0 -0
  48. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-pro-11-space-gray-portrait.png +0 -0
  49. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-pro-13-silver-landscape.png +0 -0
  50. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-pro-13-silver-portrait.png +0 -0
  51. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-pro-13-space-gray-landscape.png +0 -0
  52. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-pro-13-space-gray-portrait.png +0 -0
  53. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-silver.png +0 -0
  54. package/dist/ui/mockup-bundles/frameup-free/assets/ipad-space-grey.png +0 -0
  55. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-black.png +0 -0
  56. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-green.png +0 -0
  57. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-pro-gold.png +0 -0
  58. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-pro-max-gold.png +0 -0
  59. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-pro-max-midnight-green.png +0 -0
  60. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-pro-max-silver.png +0 -0
  61. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-pro-max-space-grey.png +0 -0
  62. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-pro-midnight-green.png +0 -0
  63. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-pro-silver.png +0 -0
  64. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-pro-space-grey.png +0 -0
  65. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-purple.png +0 -0
  66. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-red.png +0 -0
  67. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-white.png +0 -0
  68. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-11-yellow.png +0 -0
  69. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-13-pro-max.svg +5 -0
  70. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-13-pro.svg +5 -0
  71. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-14-pro-max-no-cutout.svg +4 -0
  72. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-14-pro-max.svg +5 -0
  73. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-14-pro-no-cutout.svg +4 -0
  74. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-14-pro.svg +5 -0
  75. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-15-pro-max-no-cutout.svg +4 -0
  76. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-15-pro-max.svg +5 -0
  77. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-15-pro-no-cutout.svg +4 -0
  78. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-15-pro.svg +5 -0
  79. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-16-pro-max-no-cutout.svg +10 -0
  80. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-16-pro-max.svg +11 -0
  81. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-16-pro-no-cutout.svg +4 -0
  82. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-16-pro.svg +5 -0
  83. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-17-pro-max-no-cutout.svg +4 -0
  84. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-17-pro-max.svg +5 -0
  85. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-17-pro-no-cutout.svg +4 -0
  86. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-17-pro.svg +5 -0
  87. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-5c-blue.png +0 -0
  88. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-5c-green.png +0 -0
  89. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-5c-red.png +0 -0
  90. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-5c-white.png +0 -0
  91. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-5c-yellow.png +0 -0
  92. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-5s-gold.png +0 -0
  93. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-5s-silver.png +0 -0
  94. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-5s-space-gray.png +0 -0
  95. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-6s-gold.png +0 -0
  96. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-6s-plus-gold.png +0 -0
  97. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-6s-plus-rose-gold.png +0 -0
  98. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-6s-plus-silver.png +0 -0
  99. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-6s-plus-space-gray.png +0 -0
  100. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-6s-rose-gold.png +0 -0
  101. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-6s-silver.png +0 -0
  102. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-6s-space-gray.png +0 -0
  103. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-gold.png +0 -0
  104. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-jet-black.png +0 -0
  105. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-matte-black.png +0 -0
  106. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-plus-gold.png +0 -0
  107. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-plus-jet-black.png +0 -0
  108. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-plus-matte-black.png +0 -0
  109. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-plus-rose-gold.png +0 -0
  110. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-plus-silver.png +0 -0
  111. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-rose-gold.png +0 -0
  112. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-7-silver.png +0 -0
  113. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-8-gold.png +0 -0
  114. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-8-plus-gold.png +0 -0
  115. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-8-plus-silver.png +0 -0
  116. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-8-plus-space-grey.png +0 -0
  117. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-8-silver.png +0 -0
  118. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-8-space-grey.png +0 -0
  119. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-se-gold.png +0 -0
  120. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-se-rose-gold.png +0 -0
  121. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-se-silver.png +0 -0
  122. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-se-space-gray.png +0 -0
  123. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-x-silver.png +0 -0
  124. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-x-space-grey.png +0 -0
  125. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xr-blue.png +0 -0
  126. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xr-coral.png +0 -0
  127. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xr-red.png +0 -0
  128. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xr-silver.png +0 -0
  129. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xr-space-grey.png +0 -0
  130. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xr-yellow.png +0 -0
  131. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xs-gold.png +0 -0
  132. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xs-max-gold.png +0 -0
  133. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xs-max-silver.png +0 -0
  134. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xs-max-space-grey.png +0 -0
  135. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xs-silver.png +0 -0
  136. package/dist/ui/mockup-bundles/frameup-free/assets/iphone-xs-space-grey.png +0 -0
  137. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-air-13-gold.png +0 -0
  138. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-air-13-silver.png +0 -0
  139. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-air-13-space-grey.png +0 -0
  140. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-gold.png +0 -0
  141. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-pro-13-silver.png +0 -0
  142. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-pro-13-space-grey.png +0 -0
  143. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-pro-15-silver.png +0 -0
  144. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-pro-15-space-grey.png +0 -0
  145. package/dist/ui/mockup-bundles/frameup-free/assets/macbook-space-grey.png +0 -0
  146. package/dist/ui/mockup-bundles/frameup-free/assets/pro-display-xdr.png +0 -0
  147. package/dist/ui/mockup-bundles/frameup-free/assets/thunderbolt-display.png +0 -0
  148. package/dist/ui/mockup-bundles/frameup-free/storeshot-mockups.json +2279 -0
  149. package/docs/mockup-bundles.md +104 -0
  150. package/docs/releasing.md +155 -0
  151. package/package.json +85 -0
@@ -0,0 +1,104 @@
1
+ # StoreShot mockup bundles
2
+
3
+ A mockup bundle is a normal folder. StoreShot deliberately uses an inspectable
4
+ manifest plus ordinary image files instead of a custom binary archive or a ZIP
5
+ dependency.
6
+
7
+ ```text
8
+ my-device-frames/
9
+ ├── storeshot-mockups.json
10
+ ├── LICENSE
11
+ └── assets/
12
+ ├── iphone-front.svg
13
+ └── iphone-angle.webp
14
+ ```
15
+
16
+ Choose the folder from **Import bundle** in the device-frame picker. StoreShot
17
+ reads the manifest first, lets the user select individual mockups, and copies
18
+ only the selected definitions, their referenced assets, and the license file
19
+ into the current project's `mockup-bundles/<bundle-id>/` folder.
20
+
21
+ ## Manifest
22
+
23
+ `storeshot-mockups.json` uses format version 1:
24
+
25
+ ```json
26
+ {
27
+ "format": "storeshot-mockup-bundle",
28
+ "version": 1,
29
+ "id": "example-apple-frames",
30
+ "name": "Example Apple Frames",
31
+ "author": "Example Studio",
32
+ "license": {
33
+ "name": "MIT",
34
+ "url": "https://example.com/license",
35
+ "file": "LICENSE"
36
+ },
37
+ "source": {
38
+ "name": "example/frames",
39
+ "url": "https://example.com/frames",
40
+ "revision": "0123456789abcdef"
41
+ },
42
+ "mockups": [
43
+ {
44
+ "id": "iphone-front",
45
+ "groupId": "iphone-example",
46
+ "groupName": "iPhone Example",
47
+ "name": "iPhone Example",
48
+ "description": "Front · Black",
49
+ "platform": "iphone",
50
+ "style": "standard",
51
+ "frame": "assets/iphone-front.svg",
52
+ "width": 462,
53
+ "height": 978,
54
+ "screen": {
55
+ "kind": "rect",
56
+ "x": 11,
57
+ "y": 11,
58
+ "width": 440,
59
+ "height": 956,
60
+ "cornerRadius": 55
61
+ }
62
+ }
63
+ ]
64
+ }
65
+ ```
66
+
67
+ All identifiers use lowercase letters, numbers, and hyphens. Asset and license
68
+ paths are relative to the bundle root and cannot contain parent-directory
69
+ segments. Supported frame formats are SVG, PNG, JPEG, and WebP. `thumbnail` is
70
+ optional and defaults to the frame asset.
71
+
72
+ Installed mockup IDs are namespaced as `<bundle-id>/<mockup-id>`, so unrelated
73
+ bundles can safely use the same local mockup names.
74
+
75
+ ## Screen geometry
76
+
77
+ The usual `rect` geometry places the screenshot into an axis-aligned rounded
78
+ rectangle before drawing the transparent frame above it.
79
+
80
+ Perspective frames can use a normalized 3×3 homography:
81
+
82
+ ```json
83
+ {
84
+ "kind": "projective",
85
+ "transform": [
86
+ [0.62, -0.08, 0.20],
87
+ [0.04, 0.73, 0.12],
88
+ [0.02, -0.01, 1]
89
+ ],
90
+ "sourceCornerRadius": { "x": 0.08, "y": 0.04 }
91
+ }
92
+ ```
93
+
94
+ The transform maps normalized screenshot coordinates `(u, v)` into normalized
95
+ frame coordinates. This makes matrices independent of the source screenshot
96
+ resolution while the frame's `width` and `height` define its output coordinate
97
+ space.
98
+
99
+ ## Licensing
100
+
101
+ Bundle authors should include a license file when redistribution is allowed and
102
+ record the source URL and revision. StoreShot preserves that metadata when only
103
+ a subset of a bundle is imported. Importing a bundle does not grant rights to
104
+ its assets; users remain responsible for following the bundle's license.
@@ -0,0 +1,155 @@
1
+ # Releasing StoreShot
2
+
3
+ StoreShot publishes stable releases to npm from GitHub Actions. A `vX.Y.Z` Git
4
+ tag is the release trigger, and the tag must match the version in `package.json`.
5
+ The workflow uses npm trusted publishing (OIDC), so the repository does not need
6
+ an `NPM_TOKEN` secret.
7
+
8
+ ## One-time setup and first release
9
+
10
+ The `storeshot` package does not exist on npm yet. npm only allows a trusted
11
+ publisher to be configured after the package exists, so `0.1.0` must be
12
+ published manually once.
13
+
14
+ 1. Create an account at [npmjs.com](https://www.npmjs.com/) if needed, verify
15
+ the account email address, and enable two-factor authentication for
16
+ authorization and publishing.
17
+ 2. Make sure the publishing-workflow and package-metadata changes are merged
18
+ into `main` and pushed to GitHub.
19
+ 3. From a clean checkout of `main`, sign in and verify the account:
20
+
21
+ ```bash
22
+ npm login
23
+ npm whoami
24
+ ```
25
+
26
+ 4. Validate exactly what will be released:
27
+
28
+ ```bash
29
+ npm ci
30
+ npm run check
31
+ npm pack --dry-run
32
+ ```
33
+
34
+ Read the package-content list. It should contain the built `dist/` files,
35
+ documentation, notices, and licenses, but no source-only secrets or local
36
+ project data.
37
+
38
+ 5. Publish the initial release:
39
+
40
+ ```bash
41
+ npm publish
42
+ ```
43
+
44
+ npm runs `prepublishOnly`, so the validation gate runs again before upload.
45
+ Complete the two-factor prompt when npm asks for it.
46
+
47
+ 6. Configure trusted publishing on the new package:
48
+
49
+ - Open the `storeshot` package on npm while signed in, then go to
50
+ **Settings** and find **Trusted Publisher**.
51
+ - Select **GitHub Actions**.
52
+ - Organization or user: `mikkokut`
53
+ - Repository: `storeshot`
54
+ - Workflow filename: `publish.yml`
55
+ - Environment: leave empty
56
+ - Allowed action: `npm publish`
57
+
58
+ The names are case-sensitive. Enter only `publish.yml`, not the full
59
+ `.github/workflows/publish.yml` path.
60
+
61
+ 7. Create and push the initial release tag. The workflow recognizes that
62
+ `0.1.0` already exists and exits successfully:
63
+
64
+ ```bash
65
+ git tag -a v0.1.0 -m "Release v0.1.0"
66
+ git push origin v0.1.0
67
+ ```
68
+
69
+ 8. Confirm that the **Publish to npm** workflow succeeded in GitHub Actions and
70
+ that `npm view storeshot version` prints `0.1.0`.
71
+
72
+ After the first trusted publish succeeds, remove any old npm automation tokens.
73
+ In the npm package settings, disallow token-based publishing if that option is
74
+ available. Keep trusted publishing enabled.
75
+
76
+ ## Publishing later versions
77
+
78
+ Prepare releases on `main`, after all intended changes have landed.
79
+
80
+ 1. Update `CHANGELOG.md`: move relevant entries from **Unreleased** into a new
81
+ version section with the release date, and restore an empty **Unreleased**
82
+ section for future work.
83
+ 2. Check the working tree and run the release gate:
84
+
85
+ ```bash
86
+ git status --short
87
+ npm ci
88
+ npm run check
89
+ npm pack --dry-run
90
+ ```
91
+
92
+ 3. Choose the semantic-version increment:
93
+
94
+ - `patch` for backward-compatible fixes (`0.1.0` to `0.1.1`)
95
+ - `minor` for backward-compatible features (`0.1.0` to `0.2.0`)
96
+ - `major` for breaking changes once the project reaches `1.0.0`
97
+ - While the project is on `0.x`, use a minor bump for meaningful breaking
98
+ changes and explain them in the changelog.
99
+
100
+ 4. Commit the changelog and other release preparation, then make sure the tree
101
+ is clean:
102
+
103
+ ```bash
104
+ git add CHANGELOG.md
105
+ git commit -m "Prepare v0.1.1 release"
106
+ git status --short
107
+ ```
108
+
109
+ 5. Let npm update both `package.json` and `package-lock.json`, create the version
110
+ commit, and create the matching Git tag:
111
+
112
+ ```bash
113
+ npm version patch -m "Release v%s"
114
+ ```
115
+
116
+ Replace `patch` with `minor`, `major`, or an exact version when appropriate.
117
+ Do not use `--force`; `npm version` intentionally requires a clean tree.
118
+
119
+ 6. Inspect the result before publishing:
120
+
121
+ ```bash
122
+ git show --stat --oneline HEAD
123
+ git tag --points-at HEAD
124
+ ```
125
+
126
+ 7. Push the version commit and tag together:
127
+
128
+ ```bash
129
+ git push origin main --follow-tags
130
+ ```
131
+
132
+ 8. Watch the **Publish to npm** workflow. When it succeeds, verify the registry:
133
+
134
+ ```bash
135
+ npm view storeshot version
136
+ npm install --global storeshot@0.1.1
137
+ storeshot --version
138
+ ```
139
+
140
+ Replace `0.1.1` with the released version. Optionally create a GitHub Release
141
+ from the same tag and copy the corresponding changelog section into it.
142
+
143
+ ## If publishing fails
144
+
145
+ - Fix the cause; do not delete and recreate a published npm version. npm package
146
+ name/version pairs cannot be reused.
147
+ - If validation fails before `npm publish`, fix the code on `main`, remove the
148
+ unpublished local and remote tag, bump again, and push the corrected tag.
149
+ - If npm reports an authentication error, confirm that trusted publishing uses
150
+ `mikkokut/storeshot`, the exact filename `publish.yml`, no environment, and
151
+ that the workflow has `id-token: write` permission.
152
+ - If npm already contains the version, the workflow exits successfully without
153
+ attempting to overwrite it.
154
+ - Never add an npm write token to the repository or workflow. Trusted publishing
155
+ is the normal release path after the initial bootstrap release.
package/package.json ADDED
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "storeshot",
3
+ "version": "0.1.0",
4
+ "description": "A local-first, agent-native CLI for creating App Store screenshots.",
5
+ "keywords": [
6
+ "app-store",
7
+ "screenshots",
8
+ "ios",
9
+ "cli",
10
+ "local-first",
11
+ "agent-native"
12
+ ],
13
+ "license": "MIT",
14
+ "author": "Mikko Kutilainen",
15
+ "homepage": "https://github.com/mikkokut/storeshot#readme",
16
+ "bugs": {
17
+ "url": "https://github.com/mikkokut/storeshot/issues"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/mikkokut/storeshot.git"
22
+ },
23
+ "type": "module",
24
+ "bin": {
25
+ "storeshot": "./dist/cli.js"
26
+ },
27
+ "files": [
28
+ "CHANGELOG.md",
29
+ "CONTRIBUTING.md",
30
+ "dist",
31
+ "docs",
32
+ "LICENSE",
33
+ "README.md",
34
+ "SECURITY.md",
35
+ "THIRD_PARTY_LICENSES.txt",
36
+ "THIRD_PARTY_NOTICES.md"
37
+ ],
38
+ "scripts": {
39
+ "storeshot": "tsx src/cli.ts",
40
+ "dev": "tsx watch --clear-screen=false src/cli.ts dev playground --no-open",
41
+ "build": "npm run build:cli && npm run build:ui",
42
+ "build:cli": "tsup",
43
+ "build:ui": "vite build",
44
+ "typecheck": "tsc --noEmit",
45
+ "test": "node --import tsx --test test/*.test.ts",
46
+ "licenses": "node scripts/generate-third-party-licenses.mjs",
47
+ "check:licenses": "node scripts/generate-third-party-licenses.mjs --check",
48
+ "check": "npm run check:licenses && npm run typecheck && npm test && npm run build",
49
+ "prepublishOnly": "npm run check"
50
+ },
51
+ "engines": {
52
+ "node": ">=22.12"
53
+ },
54
+ "dependencies": {
55
+ "@base-ui/react": "^1.6.0",
56
+ "@fontsource-variable/geist": "^5.2.9",
57
+ "commander": "^15.0.0",
58
+ "fabric": "^7.4.0",
59
+ "open": "^11.0.0",
60
+ "react-resizable-panels": "^4.12.2",
61
+ "tw-animate-css": "^1.4.0"
62
+ },
63
+ "devDependencies": {
64
+ "@tailwindcss/vite": "^4.3.2",
65
+ "@types/node": "^26.1.1",
66
+ "@types/react": "^19.2.17",
67
+ "@types/react-dom": "^19.2.3",
68
+ "@vitejs/plugin-react": "^6.0.3",
69
+ "class-variance-authority": "^0.7.1",
70
+ "clsx": "^2.1.1",
71
+ "lucide-react": "^1.24.0",
72
+ "react": "^19.2.7",
73
+ "react-dom": "^19.2.7",
74
+ "shadcn": "^4.13.0",
75
+ "tailwind-merge": "^3.6.0",
76
+ "tailwindcss": "^4.3.2",
77
+ "tsup": "^8.5.1",
78
+ "tsx": "^4.23.1",
79
+ "typescript": "^7.0.2",
80
+ "vite": "^8.1.4"
81
+ },
82
+ "publishConfig": {
83
+ "access": "public"
84
+ }
85
+ }