mobile-snap 1.0.0 → 1.0.3

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.html CHANGED
@@ -186,8 +186,14 @@
186
186
  gap: 1.5rem;
187
187
  }
188
188
 
189
+ .grid-4 {
190
+ display: grid;
191
+ grid-template-columns: repeat(4, 1fr);
192
+ gap: 1.5rem;
193
+ }
194
+
189
195
  @media (max-width: 768px) {
190
- .grid-2, .grid-3 {
196
+ .grid-2, .grid-3, .grid-4 {
191
197
  grid-template-columns: 1fr;
192
198
  }
193
199
  h1 {
@@ -597,6 +603,22 @@
597
603
  </header>
598
604
 
599
605
  <div class="container">
606
+ <!-- Contoh Output (Mockup Premium) -->
607
+ <section class="glass-card">
608
+ <h2>📱 Contoh Output (Mockup Premium)</h2>
609
+ <p style="color: var(--text-muted); margin-bottom: 1.5rem;">Visualisasi nyata dari tangkapan layar yang dibungkus otomatis ke dalam bingkai mockup perangkat premium menggunakan opsi <code>-m</code> atau <code>--mockup</code>:</p>
610
+ <div style="display: flex; justify-content: center; gap: 2rem; flex-wrap: wrap; margin-top: 1.5rem;">
611
+ <div style="text-align: center; max-width: 45%; min-width: 280px;">
612
+ <h4 style="margin-bottom: 0.5rem; color: #fff;">iOS (iPhone 6.7" Pro Max)</h4>
613
+ <img src="./assets/ios_example.png" alt="iOS Mockup Example" style="max-width: 100%; border-radius: 12px; border: 1px solid var(--border-card); box-shadow: 0 10px 30px rgba(0,0,0,0.5);" />
614
+ </div>
615
+ <div style="text-align: center; max-width: 45%; min-width: 280px;">
616
+ <h4 style="margin-bottom: 0.5rem; color: #fff;">Android Phone (Google Pixel 7)</h4>
617
+ <img src="./assets/android_example.png" alt="Android Mockup Example" style="max-width: 100%; border-radius: 12px; border: 1px solid var(--border-card); box-shadow: 0 10px 30px rgba(0,0,0,0.5);" />
618
+ </div>
619
+ </div>
620
+ </section>
621
+
600
622
  <!-- Arsitektur Utama -->
601
623
  <section class="glass-card">
602
624
  <h2>đŸ—ī¸ Arsitektur Aliran Kerja</h2>
@@ -721,15 +743,17 @@
721
743
  <p style="color: var(--text-muted);">Gunakan builder interaktif ini untuk membuat dan menyalin perintah sesuai kebutuhan pengembangan Anda:</p>
722
744
 
723
745
  <div class="builder-container">
724
- <div class="grid-3">
746
+ <div class="grid-2">
725
747
  <div class="form-group">
726
748
  <label for="input-url">URL Dev Server Lokal</label>
727
749
  <input type="text" id="input-url" class="form-control" value="http://localhost:4321" oninput="updateCommand()">
728
750
  </div>
729
751
  <div class="form-group">
730
752
  <label for="input-paths">Rute / Paths (pisahkan koma)</label>
731
- <input type="text" id="input-paths" class="form-control" value="/, /scan, /profile" oninput="updateCommand()">
753
+ <input type="text" id="input-paths" class="form-control" value="/" oninput="updateCommand()">
732
754
  </div>
755
+ </div>
756
+ <div class="grid-4">
733
757
  <div class="form-group">
734
758
  <label for="input-platform">Platform Target</label>
735
759
  <select id="input-platform" class="form-control" onchange="updateCommand()">
@@ -738,14 +762,26 @@
738
762
  <option value="both">Both (iOS & Android Sekaligus)</option>
739
763
  </select>
740
764
  </div>
765
+ <div class="form-group" style="display: flex; align-items: center; gap: 0.5rem; margin-top: 1.5rem;">
766
+ <input type="checkbox" id="input-crawl" onchange="updateCommand()" style="width: 20px; height: 20px; accent-color: var(--primary);">
767
+ <label for="input-crawl" style="margin-bottom: 0; cursor: pointer; color: var(--text-main); font-size: 0.85rem;">Auto-Crawl Links (-c)</label>
768
+ </div>
769
+ <div class="form-group" style="display: flex; align-items: center; gap: 0.5rem; margin-top: 1.5rem;">
770
+ <input type="checkbox" id="input-detect" onchange="updateCommand()" style="width: 20px; height: 20px; accent-color: var(--primary);">
771
+ <label for="input-detect" style="margin-bottom: 0; cursor: pointer; color: var(--text-main); font-size: 0.85rem;">Detect Astro Pages (-d)</label>
772
+ </div>
773
+ <div class="form-group" style="display: flex; align-items: center; gap: 0.5rem; margin-top: 1.5rem;">
774
+ <input type="checkbox" id="input-mockup" onchange="updateCommand()" style="width: 20px; height: 20px; accent-color: var(--primary);">
775
+ <label for="input-mockup" style="margin-bottom: 0; cursor: pointer; color: var(--text-main); font-size: 0.85rem;">Device Mockup Frame (-m)</label>
776
+ </div>
741
777
  </div>
742
- <div class="form-group">
778
+ <div class="form-group" style="margin-top: 1rem;">
743
779
  <label for="input-output">Folder Output</label>
744
780
  <input type="text" id="input-output" class="form-control" value="mobilesnap_output" oninput="updateCommand()">
745
781
  </div>
746
782
 
747
783
  <div class="builder-output">
748
- <div class="builder-cmd" id="cmd-preview">npx mobile-snap --url http://localhost:4321 --paths "/, /scan, /profile" --output mobilesnap_output</div>
784
+ <div class="builder-cmd" id="cmd-preview">npx mobile-snap --url http://localhost:4321</div>
749
785
  <button class="btn-action-copy" onclick="copyText('cmd-preview', true)">Copy Command</button>
750
786
  </div>
751
787
  </div>
@@ -788,6 +824,48 @@
788
824
  <td>Folder tujuan untuk menaruh berkas gambar hasil tangkapan.</td>
789
825
  <td><code style="color: var(--secondary);">"mobilesnap_output"</code></td>
790
826
  </tr>
827
+ <tr>
828
+ <td><span class="param-tag">--crawl</span></td>
829
+ <td><span class="param-tag">-c</span></td>
830
+ <td>Menelusuri secara otomatis semua link internal dari halaman beranda.</td>
831
+ <td><code style="color: var(--secondary);">false</code></td>
832
+ </tr>
833
+ <tr>
834
+ <td><span class="param-tag">--detect-pages</span></td>
835
+ <td><span class="param-tag">-d</span></td>
836
+ <td>Memindai direktori folder proyek lokal (Astro/Next.js) untuk rute statis.</td>
837
+ <td><code style="color: var(--secondary);">false</code></td>
838
+ </tr>
839
+ <tr>
840
+ <td><span class="param-tag">--email</span></td>
841
+ <td>-</td>
842
+ <td>Email / Username untuk autentikasi otomatis jika halaman memerlukan login.</td>
843
+ <td>-</td>
844
+ </tr>
845
+ <tr>
846
+ <td><span class="param-tag">--password</span></td>
847
+ <td>-</td>
848
+ <td>Password untuk autentikasi otomatis jika halaman memerlukan login (input disensor).</td>
849
+ <td>-</td>
850
+ </tr>
851
+ <tr>
852
+ <td><span class="param-tag">--login-path</span></td>
853
+ <td>-</td>
854
+ <td>Jalur rute URL ke halaman login.</td>
855
+ <td><code style="color: var(--secondary);">"/login.html"</code></td>
856
+ </tr>
857
+ <tr>
858
+ <td><span class="param-tag">--html</span></td>
859
+ <td>-</td>
860
+ <td>Menambahkan ekstensi .html otomatis ke rute statis yang terdeteksi.</td>
861
+ <td><code style="color: var(--secondary);">false</code></td>
862
+ </tr>
863
+ <tr>
864
+ <td><span class="param-tag">--mockup</span></td>
865
+ <td><span class="param-tag">-m</span></td>
866
+ <td>Membungkus tangkapan layar dalam bingkai mockup perangkat (iPhone/Android) dengan status bar dan bayangan transparan.</td>
867
+ <td><code style="color: var(--secondary);">false</code></td>
868
+ </tr>
791
869
  </tbody>
792
870
  </table>
793
871
  </section>
@@ -832,9 +910,12 @@
832
910
  const paths = document.getElementById('input-paths').value.trim();
833
911
  const output = document.getElementById('input-output').value.trim() || 'mobilesnap_output';
834
912
  const platform = document.getElementById('input-platform').value;
913
+ const crawl = document.getElementById('input-crawl').checked;
914
+ const detect = document.getElementById('input-detect').checked;
915
+ const mockup = document.getElementById('input-mockup').checked;
835
916
 
836
917
  let command = `npx mobile-snap --url ${url}`;
837
- if (paths) {
918
+ if (paths && paths !== '/') {
838
919
  command += ` --paths "${paths}"`;
839
920
  }
840
921
  if (platform !== 'ios') {
@@ -843,6 +924,15 @@
843
924
  if (output !== 'mobilesnap_output') {
844
925
  command += ` --output ${output}`;
845
926
  }
927
+ if (crawl) {
928
+ command += ` --crawl`;
929
+ }
930
+ if (detect) {
931
+ command += ` --detect-pages`;
932
+ }
933
+ if (mockup) {
934
+ command += ` --mockup`;
935
+ }
846
936
 
847
937
  document.getElementById('cmd-preview').innerText = command;
848
938
  }
package/README.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  MobileSnap adalah alat CLI (Command Line Interface) berbasis Node.js yang dirancang untuk mengotomatisasi pengambilan tangkapan layar (screenshot) App Store & Google Play Store dengan presisi piksel tinggi langsung dari server pengembangan lokal (seperti Astro, Next.js, React, atau Vue).
4
4
 
5
+ ### 📱 Contoh Output (Mockup Premium)
6
+
7
+ Berikut adalah visualisasi nyata dari tangkapan layar yang dibungkus otomatis ke dalam bingkai mockup perangkat premium (menggunakan opsi `-m` atau `--mockup`):
8
+
9
+ | iOS (iPhone 6.7" Pro Max) | Android Phone (Google Pixel 7) |
10
+ | :---: | :---: |
11
+ | ![iOS Mockup Example](./assets/ios_example.png) | ![Android Mockup Example](./assets/android_example.png) |
12
+
5
13
  ---
6
14
 
7
15
  ## đŸ—ī¸ Arsitektur Sistem
@@ -77,7 +85,7 @@ npm install -g mobile-snap
77
85
 
78
86
  ## đŸ’ģ Panduan Penggunaan CLI
79
87
 
80
- Aplikasi ini menerima 4 opsi utama:
88
+ Aplikasi ini menerima opsi utama berikut:
81
89
 
82
90
  | Parameter | Singkatan | Deskripsi | Standar (Default) | Pilihan |
83
91
  | :--- | :--- | :--- | :--- | :--- |
@@ -85,6 +93,13 @@ Aplikasi ini menerima 4 opsi utama:
85
93
  | `--paths` | `-p` | Jalur/rute halaman yang dipisahkan tanda koma. | `/` | - |
86
94
  | `--output`| `-o` | Nama direktori tempat menyimpan gambar. | `mobilesnap_output` | - |
87
95
  | `--platform`| `-l`| Platform target tangkapan layar. | `ios` | `ios`, `android`, `both` |
96
+ | `--crawl` | `-c` | Mengaktifkan penelusuran (crawl) otomatis tautan internal di halaman beranda. | `false` | - |
97
+ | `--detect-pages` | `-d` | Memindai direktori halaman lokal (`src/pages` atau `pages`) untuk rute statis. | `false` | - |
98
+ | `--email` | - | Email untuk autentikasi otomatis. | - | - |
99
+ | `--password` | - | Password untuk autentikasi otomatis (disensor di terminal). | - | - |
100
+ | `--login-path`| - | Jalur rute ke halaman login. | `/login.html` | - |
101
+ | `--html` | - | Otomatis menambahkan akhiran `.html` pada rute statis terdeteksi. | `false` | - |
102
+ | `--mockup` | `-m` | Membungkus tangkapan layar dalam bingkai mockup perangkat (iPhone/Android) yang premium dengan status bar dan bayangan transparan. | `false` | - |
88
103
 
89
104
  ### Contoh Perintah
90
105
 
@@ -93,13 +108,71 @@ Aplikasi ini menerima 4 opsi utama:
93
108
  npx mobile-snap --url http://localhost:4321
94
109
  ```
95
110
 
96
- #### 2. Pengambilan Halaman Android Saja
111
+ #### 2. Pengambilan Halaman Android Saja dengan Mockup Bingkai Perangkat
97
112
  ```powershell
98
- npx mobile-snap --url http://localhost:4321 --platform android
113
+ npx mobile-snap --url http://localhost:4321 --platform android --mockup
99
114
  ```
100
115
 
101
- #### 3. Pengambilan 2 Platform Sekaligus (iOS & Android)
116
+ #### 3. Pengambilan Rute Tertentu untuk 2 Platform Sekaligus
102
117
  Mengambil gambar halaman utama `/` dan halaman `/scan` untuk kedua platform sekaligus ke folder `hasil_store`:
103
118
  ```powershell
104
119
  npx mobile-snap --url http://localhost:4321 --paths "/, /scan" --platform both --output hasil_store
105
120
  ```
121
+
122
+ #### 4. Auto-Crawl Halaman Web & Login Interaktif dengan Mockup Bingkai Perangkat
123
+ Menelusuri semua tautan internal secara otomatis dari beranda dan memotret setiap halaman yang ditemukan dengan bingkai mockup iPhone/Android:
124
+ ```powershell
125
+ npx mobile-snap --url http://localhost:4321 --crawl --platform both --mockup
126
+ ```
127
+
128
+
129
+ #### 5. Auto-Detect Rute Proyek Lokal (Astro / Next.js) dengan Auto-Login
130
+ Jika Anda berada di dalam root direktori proyek Astro Anda, jalankan perintah ini untuk mendeteksi secara otomatis semua rute halaman statis dari folder `src/pages` dengan login otomatis:
131
+ ```powershell
132
+ npx mobile-snap --url http://localhost:4321 --detect-pages --html --email "user@email.com" --password "rahasia"
133
+ ```
134
+
135
+ ---
136
+
137
+ ## 🔐 Autentikasi Otomatis & Interaktif
138
+
139
+ MobileSnap secara cerdas membedakan halaman publik dan halaman terproteksi (yang membutuhkan login) berdasarkan pengalihan client-side ke rute login.
140
+
141
+ Jika terdeteksi rute yang memerlukan login, MobileSnap akan:
142
+ 1. **Meminta Kredensial Secara Interaktif**: Jika opsi `--email` dan/atau `--password` tidak diberikan lewat CLI, sistem akan menanyakan email dan password secara interaktif di terminal dengan sensor password otomatis demi keamanan.
143
+ 2. **Auto-Login**: MobileSnap akan melakukan proses sign-in sebelum mengambil tangkapan layar untuk semua rute terproteksi.
144
+ 3. **Crawl Pasca-Login**: Jika opsi `--crawl` aktif, MobileSnap juga akan menjelajahi menu dan tautan internal yang baru muncul di dashboard pasca-login.
145
+
146
+ ---
147
+
148
+ ## â„šī¸ Bantuan Perintah (`--help`)
149
+
150
+ Anda selalu dapat memanggil opsi bantuan langsung dari terminal dengan menjalankan:
151
+
152
+ ```powershell
153
+ npx mobile-snap --help
154
+ ```
155
+
156
+ Output bantuan resmi:
157
+ ```text
158
+ Usage: mobile-snap [options]
159
+
160
+ ⚡ MobileSnap CLI: Automate App Store & Google Play Store screenshots
161
+
162
+ Options:
163
+ -V, --version output the version number
164
+ -u, --url <url> Base URL of the local development server (e.g. localhost:3000)
165
+ -p, --paths <paths> Comma-separated list of routes to capture (default: "/")
166
+ -o, --output <output> Output directory to save screenshots (default: "mobilesnap_output")
167
+ -l, --platform <platform> Target platform: "ios", "android", or "both" (default: "ios")
168
+ -c, --crawl Discover and screenshot all internal links automatically (default: false)
169
+ -d, --detect-pages Scan local project pages directory (src/pages or pages) for static routes (default: false)
170
+ --email <email> Email for automatic login authentication
171
+ --password <password> Password for automatic login authentication
172
+ --login-path <path> Path to the login page (default: "/login.html")
173
+ --html Auto append .html extension to detected routes (default: false)
174
+ -m, --mockup Wrap screenshots in a beautiful iPhone/Android device mockup frame (default: false)
175
+ -h, --help display help for command
176
+ ```
177
+
178
+
Binary file
Binary file