From 2bf6862e253ac32bbb48c8b25fa06d4d7030885d Mon Sep 17 00:00:00 2001 From: kyeunga25 Date: Thu, 16 Jul 2026 04:36:51 +0800 Subject: [PATCH] feat: expand Apple device compatibility --- CHANGELOG.md | 26 + CONTRIBUTING.md | 89 +++ LICENSE | 21 + README.md | 172 ++--- README.zh-Hant.md | 117 +++ TODO.md | 4 +- docs/DEVICE_PROFILE_GUIDE.md | 4 + docs/screenshots/wallpect-desktop.png | Bin 0 -> 145814 bytes docs/screenshots/wallpect-mobile.png | Bin 0 -> 37443 bytes package-lock.json | 4 + package.json | 13 + src/components/header/Header.tsx | 2 +- src/components/preview/DevicePreview.tsx | 22 +- src/data/devices/apple/profiles.ts | 858 +++++++++++++++++++-- src/styles/index.css | 34 +- tests/integration/editor-controls.test.tsx | 27 +- tests/unit/profiles.test.ts | 44 +- tests/unit/transforms.test.ts | 4 +- 18 files changed, 1272 insertions(+), 169 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 README.zh-Hant.md create mode 100644 docs/screenshots/wallpect-desktop.png create mode 100644 docs/screenshots/wallpect-mobile.png diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..803ffe3 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,26 @@ +# Changelog + +All notable changes to Wallpect are recorded in this file. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## 0.1.0 - 2026-07-16 + +### Added + +- Privacy-first browser-only wallpaper composition and exact-resolution PNG, JPEG, and WebP export. +- 74 Apple display profiles: 27 iPhone, 20 iPad, and 27 Mac/display profiles. +- Complete requested coverage for iPhone 13 and later, iPad models introduced in 2021 or later, and Macs with built-in displays introduced in 2021 or later, current through July 2026. +- Traditional Chinese, Simplified Chinese, and English interfaces. +- Desktop and mobile editor layouts, device search, recent devices, orientation controls, safe-area guides, and system-overlay previews. +- Automated unit, integration, browser, privacy, and exact-output checks. +- MIT license, contribution guide, bilingual project documentation, and Cloudflare Pages deployment configuration. + +### Changed + +- Device previews now use profile-specific screen corner geometry and distinguish MacBook laptop frames from desktop Mac/display frames. +- The device picker now exposes model year, diagonal size, physical resolution, accuracy level, category counts, and searchable profile metadata. +- Apple device sources and review dates were refreshed on 2026-07-16. + +### Security + +- Uploaded images remain in browser memory and are not sent to an upload API or analytics service. +- Local secrets, credentials, build output, browser reports, and editor/OS metadata are excluded from version control. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..2c2baf4 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,89 @@ +# Contributing to Wallpect + +[繁體中文](#繁體中文) · [English](#english) + +## 繁體中文 + +感謝你協助改善 Wallpect。請讓每個 issue 或 pull request 專注於一項清楚的問題,並說明對用戶可見的影響。 + +### 開始之前 + +- 使用 Node.js 22 或更新版本。 +- 執行 `npm ci` 安裝鎖定版本的依賴。 +- 不要加入圖片上傳 API、圖片分析、帳戶追蹤或其他把用戶圖片傳離瀏覽器的功能。 +- 預覽與匯出必須共用相同的變換及渲染計算。 +- 裝置資料必須位於 `src/data/devices`,不要寫入 UI 元件。 +- 推算或估算的設定檔資料不得標示為 `verified`。 + +### 開發流程 + +1. 建立範圍清晰的分支及變更。 +2. 為行為修正或新邏輯加入相應測試。 +3. 修改裝置設定檔時,提供來源、檢查日期、證據類型及準確度等級。 +4. 不要提交私人桌布、Apple 專有素材、憑證、環境檔或建置產物。 +5. 執行以下檢查: + +```bash +npm run lint +npm test +npm run build +``` + +涉及完整編輯流程、響應式版面或瀏覽器行為時,亦應執行: + +```bash +npm run test:e2e +``` + +### Pull request 清單 + +- 清楚說明問題、處理方式及用戶影響。 +- 列出已執行的測試及結果。 +- UI 變更附上不含私人圖片的前後畫面。 +- 裝置資料變更連結到可靠來源,並依照[準確度政策](docs/ACCURACY_POLICY.md)標示資料。 +- 確認上傳圖片仍只留在瀏覽器中。 + +一般錯誤或功能建議可使用 GitHub Issues。涉及未公開漏洞或可能洩露資料的問題,請勿在公開 issue 中附上敏感細節。 + +## English + +Thank you for helping improve Wallpect. Keep each issue or pull request focused on one clear problem, and explain the user-visible impact. + +### Before you start + +- Use Node.js 22 or newer. +- Run `npm ci` to install the locked dependency versions. +- Do not add image upload APIs, image analytics, account tracking, or any feature that sends a user's image out of the browser. +- Preview and export must share the same transform and rendering calculations. +- Keep device data in `src/data/devices`, outside UI components. +- Never label derived or estimated profile data as `verified`. + +### Development workflow + +1. Create a focused branch and change set. +2. Add tests for behavior fixes or new logic. +3. For device profiles, include sources, review dates, evidence types, and accuracy levels. +4. Do not commit private wallpapers, proprietary Apple assets, credentials, environment files, or generated build output. +5. Run the core checks: + +```bash +npm run lint +npm test +npm run build +``` + +Also run the end-to-end suite when changing the complete editor flow, responsive layout, or browser behavior: + +```bash +npm run test:e2e +``` + +### Pull request checklist + +- Explain the problem, approach, and user impact. +- List the tests run and their results. +- Include before/after images for UI changes, without private imagery. +- Link device-data changes to reliable sources and follow the [accuracy policy](docs/ACCURACY_POLICY.md). +- Confirm that uploaded image content still stays in the browser. + +Use GitHub Issues for ordinary bugs and feature requests. Do not place sensitive details in a public issue when reporting an undisclosed vulnerability or possible data exposure. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..37220da --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 kyeunga25 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index f2d9bd9..4456dc1 100644 --- a/README.md +++ b/README.md @@ -1,127 +1,117 @@ +
+ # Wallpect -Wallpect 是一個以隱私為優先的桌布預覽與適配工具。 +**Privacy-first wallpaper preview and fitting for Apple devices.** -上傳圖片、選擇 Apple 裝置設定檔,即可檢查精確解析度、長寬比、裁切範圍、開孔與安全區域覆疊,並以目標裝置的解析度匯出桌布。介面首次載入時預設使用繁體中文,也可切換至簡體中文或英文;語言偏好只會儲存在瀏覽器本機。 +[Open Wallpect](https://wallpect.k-y.cc) · [繁體中文](README.zh-Hant.md) · [Documentation](#documentation) -## 設計原則 +[![CI](https://github.com/kyeunga25/wallpect/actions/workflows/ci.yml/badge.svg)](https://github.com/kyeunga25/wallpect/actions/workflows/ci.yml) +[![License: MIT](https://img.shields.io/badge/License-MIT-2563eb.svg)](LICENSE) +[![Live app](https://img.shields.io/badge/Live-wallpect.k--y.cc-16a34a.svg)](https://wallpect.k-y.cc) -- 圖片只留在瀏覽器中 -- 精確的輸出尺寸 -- 以資料驅動裝置設定檔 -- 預覽與匯出共用相同的渲染邏輯 -- 清楚標示資料準確度 +
-## MVP 已包含功能 +![Wallpect desktop workspace showing an iPhone wallpaper preview and export controls](docs/screenshots/wallpect-desktop.png) -- 12 個代表性 iPhone、5 個 iPad,以及 6 個 Mac/顯示器設定檔 -- 在本機解碼 PNG、JPEG 與 WebP,安全限制為 30 MB/最長邊 12,000 px -- 直接拖曳、雙指或滾動縮放、鍵盤微調、數值平移、旋轉,以及填滿/完整顯示 -- 純色、透明與模糊延伸背景 -- 純桌布、鎖定畫面/桌面與安全區域預覽模式 -- 以資料驅動的開孔、安全區域、鎖定畫面、選單列與 Dock 覆疊 -- 每部支援裝置分別保存直向/橫向構圖 -- 以 Canvas 匯出精確解析度的 PNG、JPEG 與 WebP -- 響應式桌面與流動版工作區 -- 預設繁體中文,並可切換簡體中文或英文;偏好設定保存在本機 -- 首次載入正式版本後可離線快取應用程式外殼 +Wallpect helps you compose an image for a selected Apple device, inspect likely system obstructions, and export it at the profile's exact pixel dimensions. Image decoding, editing, preview, and export all happen inside your browser—there is no image upload endpoint, account, or third-party image analysis. -## 本機開發 +## What you can do -需求:Node.js 22 或以上版本,以及 npm。 +| Inspect | Compose | Export | +| ------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| Check aspect ratio, cutouts, Safe Area, Lock Screen, menu bar, and Dock guides. | Drag, zoom, pan, rotate, fill, fit, or extend an image against a device preview. | Download PNG, JPEG, or WebP at the selected profile's physical pixel dimensions. | -```bash -npm install -npm run dev -``` +### Highlights -品質檢查: +- 74 profiles: 27 iPhone, 20 iPad, and 27 Mac/display profiles, covering every requested display family introduced from 2021 through July 2026 +- Local PNG, JPEG, and WebP decoding with file, dimension, and pixel-count limits +- Portrait and landscape compositions stored independently for each device +- Solid, transparent, or blurred-extension backgrounds +- Shared transform and Canvas rendering calculations for preview and export +- Responsive desktop and mobile workspaces +- Traditional Chinese by default, with Simplified Chinese and English options +- Offline app-shell caching after the first production visit +- Explicit accuracy levels for published, derived, and estimated device data -```bash -npm run lint -npm test -npm run build -npm run test:e2e -``` - -端對端測試涵蓋 Chromium、WebKit、本機安裝的 Microsoft Edge,以及 Firefox。 +## Try it -## 架構 - -```text -src/components UI 面板與裝置預覽介面 -src/state 編輯器狀態、各裝置的構圖變換與偏好設定 -src/core 適配、變換、驗證、Canvas 渲染與匯出邏輯 -src/data/devices 資料驅動的 Apple 裝置設定檔 -src/i18n 預設語言、偏好保存與介面翻譯 -src/types 領域模型 -tests/unit 計算與資料驗證測試 -tests/integration 元件互動測試 -tests/e2e 從上傳至匯出的 Playwright 流程 -``` +1. Open [wallpect.k-y.cc](https://wallpect.k-y.cc). +2. Use the bundled sample or choose an image from your device. +3. Select a device profile and orientation. +4. Adjust the composition and enable the guides you want to inspect. +5. Choose PNG, JPEG, or WebP and export at the displayed resolution. -預覽與匯出均會呼叫 `renderWallpaper`。平移值會儲存為目標畫布的標準化比例,因此縮小的預覽與完整解析度匯出可保持相同構圖。 +Your image stays in browser memory and is released when it is replaced or the page is closed. Only preferences such as the recent device identifier may be saved in `localStorage`. -## 私隱與限制 +

+ Wallpect mobile workspace showing the device selector and wallpaper preview +

-上傳圖片的像素、名稱與 Canvas 資料不會傳送到伺服器。最近使用的裝置識別碼可能儲存在 `localStorage`;圖片與 object URL 只存在記憶體中,在圖片被取代或頁面關閉時釋放。 +## Accuracy, by design -Wallpect 會按所選設定檔輸出精確像素尺寸,但 iOS、iPadOS 與 macOS 仍可能套用系統層級的縮放、延伸桌布、透視、景深或填滿效果。 +Wallpect separates published display facts from geometry that must be measured or derived: -Wallpect 是獨立工具,與 Apple Inc. 無關,亦未獲其背書。 +- The selected profile defines the export pixel dimensions and aspect ratio. +- Device frames and system overlays are composition guides, not official Apple renderings. +- Profiles declare an accuracy level; the initial data set is intentionally marked `high`, not `verified`, because much of the obstruction geometry is derived. +- iOS, iPadOS, and macOS may still apply system-level zoom, extension, depth, or fill behavior. -## 安全控制 +See the [accuracy policy](docs/ACCURACY_POLICY.md) for the complete definition and reporting requirements. -- 沒有圖片上傳端點、帳號系統、分析服務或第三方圖片處理 -- 圖片進入編輯器前會驗證 MIME、檔案大小、最長邊與總像素數 -- Cloudflare Pages 使用嚴格的 Content Security Policy 與瀏覽器權限政策 -- 同源 Service Worker 快取只使用 Wallpect 專屬快取名稱 -- 正式版本停用 source map -- Git 會排除本機環境檔、憑證、證書、建置輸出與測試產物 +## Local development -## 部署 +Requirements: Node.js 22 or newer and npm. -專案已設定使用 Cloudflare Pages: +```bash +git clone https://github.com/kyeunga25/wallpect.git +cd wallpect +npm ci +npm run dev +``` -- 建置指令:`npm run build` -- 輸出目錄:`dist` -- 預定正式網域:`wallpect.k-y.cc` -- 預定開發網域:`dev.wallpect.k-y.cc` +Run the core quality checks: -請參閱 [部署指南](docs/DEPLOYMENT.md)、[裝置設定檔指南](docs/DEVICE_PROFILE_GUIDE.md)、[準確度政策](docs/ACCURACY_POLICY.md),以及已使用中文撰寫的[產品需求與實作計劃](docs/WALLPECT_PRODUCT_REQUIREMENTS_AND_IMPLEMENTATION_PLAN.md)。 +```bash +npm run lint +npm test +npm run build +``` ---- +The Playwright suite additionally covers Chromium, WebKit, Microsoft Edge, and Firefox: -## English +```bash +npm run test:e2e +``` -Wallpect is a privacy-first wallpaper preview and fitting tool. +## Architecture -Upload an image, select an Apple device profile, inspect its exact resolution, aspect ratio, crop area, cutout, and safe-area overlays, then export a wallpaper at the target device resolution. The interface defaults to Traditional Chinese on first load and can be switched to Simplified Chinese or English; the preference stays in the browser. +| Path | Responsibility | +| ------------------ | ------------------------------------------------------------- | +| `src/components` | Editor panels, controls, and device preview UI | +| `src/state` | Editor state, per-device transforms, and preferences | +| `src/core` | Fitting, transforms, validation, Canvas rendering, and export | +| `src/data/devices` | Data-driven Apple device profiles outside the UI | +| `src/i18n` | Locale selection, persistence, and translations | +| `tests` | Unit, integration, and end-to-end coverage | -### Principles +Preview and export both call `renderWallpaper`. Pan offsets use the target canvas's normalized coordinate space, so a scaled preview and full-resolution export preserve the same composition. -- Images stay in the browser -- Exact output dimensions -- Device profiles are data-driven -- Preview and export share the same rendering logic -- Accuracy levels are disclosed +## Documentation -### Local development +- [Accuracy policy](docs/ACCURACY_POLICY.md) +- [Device profile guide](docs/DEVICE_PROFILE_GUIDE.md) +- [Deployment guide](docs/DEPLOYMENT.md) +- [Product requirements and implementation plan](docs/WALLPECT_PRODUCT_REQUIREMENTS_AND_IMPLEMENTATION_PLAN.md) +- [Implementation checklist](TODO.md) +- [Changelog](CHANGELOG.md) -Requirements: Node.js 22+ and npm. +## Contributing -```bash -npm install -npm run dev -``` +Issues and focused pull requests are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) before changing device data, rendering behavior, or privacy-sensitive code. -Quality checks: +## License and disclaimer -```bash -npm run lint -npm test -npm run build -npm run test:e2e -``` +Wallpect is available under the [MIT License](LICENSE). -The end-to-end suite covers Chromium, WebKit, the locally installed Microsoft Edge, and Firefox. See the Chinese sections above for the complete feature, architecture, privacy, security, and deployment reference. +Wallpect is an independent tool. It is not affiliated with or endorsed by Apple Inc. Apple product names are used only to identify compatible device profiles. diff --git a/README.zh-Hant.md b/README.zh-Hant.md new file mode 100644 index 0000000..2952101 --- /dev/null +++ b/README.zh-Hant.md @@ -0,0 +1,117 @@ +
+ +# Wallpect + +**以私隱為先的 Apple 裝置桌布預覽與適配工具。** + +[立即使用](https://wallpect.k-y.cc) · [English](README.md) · [技術文件](#技術文件) + +[![CI](https://github.com/kyeunga25/wallpect/actions/workflows/ci.yml/badge.svg)](https://github.com/kyeunga25/wallpect/actions/workflows/ci.yml) +[![License: MIT](https://img.shields.io/badge/License-MIT-2563eb.svg)](LICENSE) +[![正式網站](https://img.shields.io/badge/正式網站-wallpect.k--y.cc-16a34a.svg)](https://wallpect.k-y.cc) + +
+ +![Wallpect 桌面工作區,顯示 iPhone 桌布預覽及匯出控制](docs/screenshots/wallpect-desktop.png) + +Wallpect 讓你按所選 Apple 裝置調整圖片構圖、檢查可能遮擋內容的系統介面,並以設定檔的精確像素尺寸匯出桌布。圖片解碼、編輯、預覽及匯出全部在瀏覽器內完成;沒有圖片上傳端點、帳戶系統或第三方圖片分析。 + +## 可以做甚麼 + +| 檢查 | 構圖 | 匯出 | +| ------------------------------------------------------------ | -------------------------------------------------- | -------------------------------------------------- | +| 檢查長寬比、開孔、安全區域、鎖定畫面、選單列及 Dock 輔助線。 | 拖曳、縮放、平移、旋轉、填滿、完整顯示或延伸圖片。 | 按所選設定檔的實體像素尺寸下載 PNG、JPEG 或 WebP。 | + +### 主要功能 + +- 74 個設定檔:27 個 iPhone、20 個 iPad,以及 27 個 Mac/顯示器,涵蓋 2021 年至 2026 年 7 月要求支援的所有顯示系列 +- 在本機解碼 PNG、JPEG 與 WebP,並限制檔案大小、圖像尺寸及總像素數 +- 每部裝置分別保存直向及橫向構圖 +- 純色、透明或模糊延伸背景 +- 預覽與匯出共用相同的變換及 Canvas 渲染計算 +- 響應式桌面與流動版工作區 +- 預設繁體中文,並支援簡體中文及英文 +- 首次載入正式版本後可離線快取應用程式外殼 +- 清楚標示公開、推算及估算裝置資料的準確度 + +## 立即試用 + +1. 開啟 [wallpect.k-y.cc](https://wallpect.k-y.cc)。 +2. 使用內建示範圖片,或從裝置選擇圖片。 +3. 選擇裝置設定檔及方向。 +4. 調整構圖,並開啟需要檢查的輔助線。 +5. 選擇 PNG、JPEG 或 WebP,再按顯示的解析度匯出。 + +圖片只會保存在瀏覽器記憶體,當圖片被取代或頁面關閉時便會釋放。只有最近使用的裝置識別碼等偏好可能儲存在 `localStorage`。 + +

+ Wallpect 流動版工作區,顯示裝置選擇器及桌布預覽 +

+ +## 準確度原則 + +Wallpect 將公開的顯示資料與需要量度或推算的幾何資料分開處理: + +- 所選設定檔決定匯出像素尺寸及長寬比。 +- 裝置外框及系統覆疊只是構圖輔助線,並非 Apple 官方渲染畫面。 +- 每個設定檔均標示準確度;初始資料集刻意標記為 `high` 而非 `verified`,因為大部分遮擋幾何均為推算值。 +- iOS、iPadOS 及 macOS 仍可能套用系統層級的縮放、延伸、景深或填滿行為。 + +完整定義及資料問題回報要求請參閱[準確度政策](docs/ACCURACY_POLICY.md)。 + +## 本機開發 + +需求:Node.js 22 或更新版本,以及 npm。 + +```bash +git clone https://github.com/kyeunga25/wallpect.git +cd wallpect +npm ci +npm run dev +``` + +執行主要品質檢查: + +```bash +npm run lint +npm test +npm run build +``` + +Playwright 測試另外涵蓋 Chromium、WebKit、Microsoft Edge 及 Firefox: + +```bash +npm run test:e2e +``` + +## 架構 + +| 路徑 | 職責 | +| ------------------ | ------------------------------------------- | +| `src/components` | 編輯器面板、控制項及裝置預覽介面 | +| `src/state` | 編輯器狀態、各裝置的構圖變換及偏好 | +| `src/core` | 適配、變換、驗證、Canvas 渲染及匯出 | +| `src/data/devices` | 放在 UI 以外、以資料驅動的 Apple 裝置設定檔 | +| `src/i18n` | 語言選擇、偏好保存及翻譯 | +| `tests` | 單元、整合及端對端測試 | + +預覽與匯出均會呼叫 `renderWallpaper`。平移值使用目標 Canvas 的標準化座標,因此縮小預覽與完整解析度匯出可保持相同構圖。 + +## 技術文件 + +- [準確度政策](docs/ACCURACY_POLICY.md) +- [裝置設定檔指南](docs/DEVICE_PROFILE_GUIDE.md) +- [部署指南](docs/DEPLOYMENT.md) +- [產品需求與實作計劃](docs/WALLPECT_PRODUCT_REQUIREMENTS_AND_IMPLEMENTATION_PLAN.md) +- [實作清單](TODO.md) +- [版本記錄](CHANGELOG.md) + +## 參與貢獻 + +歡迎提交 issue 及範圍清晰的 pull request。修改裝置資料、渲染行為或涉及私隱的程式碼前,請先閱讀 [CONTRIBUTING.md](CONTRIBUTING.md)。 + +## 授權及聲明 + +Wallpect 採用 [MIT License](LICENSE)。 + +Wallpect 是獨立工具,與 Apple Inc. 無關,亦未獲其背書。Apple 產品名稱只用於識別相容的裝置設定檔。 diff --git a/TODO.md b/TODO.md index 536ed9a..6adec1c 100644 --- a/TODO.md +++ b/TODO.md @@ -16,7 +16,7 @@ - [x] 在 Chromium、WebKit、Microsoft Edge 與 Firefox 執行自動相容性檢查 - [x] 加入預設繁體中文,並支援簡體中文與英文切換 - [x] 完成提交前的依賴、機密、瀏覽器介面與安全 header 審查 -- [ ] 建立 Cloudflare Pages 專案並綁定 `wallpect.k-y.cc`(需要部署權限) +- [x] 建立 Cloudflare Pages 專案並綁定 `wallpect.k-y.cc` - [ ] 完成實體裝置 Safari、低記憶體流動裝置、CMYK JPEG 與 EXIF 手動 QA ## English @@ -35,5 +35,5 @@ - [x] Run automated compatibility checks in Chromium, WebKit, Microsoft Edge, and Firefox - [x] Default to Traditional Chinese and support Simplified Chinese and English switching - [x] Complete pre-commit dependency, secret, browser-surface, and security-header review -- [ ] Create the Cloudflare Pages project and bind `wallpect.k-y.cc` (requires deployment access) +- [x] Create the Cloudflare Pages project and bind `wallpect.k-y.cc` - [ ] Complete physical-device Safari, low-memory mobile, CMYK JPEG, and EXIF manual QA diff --git a/docs/DEVICE_PROFILE_GUIDE.md b/docs/DEVICE_PROFILE_GUIDE.md index c85ef9f..9183c60 100644 --- a/docs/DEVICE_PROFILE_GUIDE.md +++ b/docs/DEVICE_PROFILE_GUIDE.md @@ -4,6 +4,8 @@ 裝置設定檔是位於 `src/data/devices/apple/profiles.ts` 的純 TypeScript 記錄。預覽介面不含針對個別型號的分支;只要加入有效的設定檔,它便會自動出現在搜尋、選擇器、覆疊、資訊與匯出功能中。 +目前資料集包含 27 個 iPhone、20 個 2021 年或之後的 iPad,以及 27 個 2021 年或之後、具備內建螢幕的 Mac/Apple 顯示器設定檔。Mac mini、Mac Studio 與 Mac Pro 沒有內建螢幕,其桌布解析度由外接顯示器決定,因此不建立虛構的主機螢幕設定檔。 + ### 必填欄位 每個設定檔必須包含: @@ -45,6 +47,8 @@ Device profiles are plain TypeScript records in `src/data/devices/apple/profiles.ts`. The preview does not contain model-specific branches: adding a valid profile is enough for it to appear in search, selection, overlays, information, and export. +The current data set contains 27 iPhones, 20 iPads introduced in 2021 or later, and 27 Macs with built-in displays or Apple displays introduced in 2021 or later. Mac mini, Mac Studio, and Mac Pro have no built-in display, so their wallpaper resolution is determined by the attached display and no fictitious computer-screen profile is created. + ### Required fields Every profile must include: diff --git a/docs/screenshots/wallpect-desktop.png b/docs/screenshots/wallpect-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..da7567cd0a663ed63f185dd8f43b7dceec03dd80 GIT binary patch literal 145814 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Π&MwU+*)^vLP?Dzk#CU`~qg`4Whbl!r~3b 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 ji4E0yerH-ul2>>Y(JK=KnVVd-#5) literal 0 HcmV?d00001 diff --git a/package-lock.json b/package-lock.json index 5c2a8e4..200be92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "": { "name": "wallpect", "version": "0.1.0", + "license": "MIT", "dependencies": { "lucide-react": "1.24.0", "react": "19.2.7", @@ -31,6 +32,9 @@ "typescript-eslint": "8.63.0", "vite": "8.1.4", "vitest": "4.1.10" + }, + "engines": { + "node": ">=22" } }, "node_modules/@adobe/css-tools": { diff --git a/package.json b/package.json index 3329af5..130912c 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,19 @@ "name": "wallpect", "private": true, "version": "0.1.0", + "description": "Privacy-first wallpaper preview and fitting tool for Apple devices.", + "license": "MIT", + "homepage": "https://wallpect.k-y.cc", + "repository": { + "type": "git", + "url": "git+https://github.com/kyeunga25/wallpect.git" + }, + "bugs": { + "url": "https://github.com/kyeunga25/wallpect/issues" + }, + "engines": { + "node": ">=22" + }, "type": "module", "scripts": { "dev": "vite", diff --git a/src/components/header/Header.tsx b/src/components/header/Header.tsx index c9decb5..9aaa853 100644 --- a/src/components/header/Header.tsx +++ b/src/components/header/Header.tsx @@ -30,7 +30,7 @@ export function Header({ onOpenInfo }: { onOpenInfo: (view: Exclude onOpenInfo("privacy")}> {t("Privacy")} - + GitHub diff --git a/src/components/preview/DevicePreview.tsx b/src/components/preview/DevicePreview.tsx index 68b8792..2a0fe4e 100644 --- a/src/components/preview/DevicePreview.tsx +++ b/src/components/preview/DevicePreview.tsx @@ -146,7 +146,10 @@ export function DevicePreview() { const { profile, orientedDevice, previewMode, setPreviewMode, frameVisible, setFrameVisible } = useEditor(); const isMac = profile.platform === "macOS"; + const isMacBook = profile.category === "macbook"; const ratio = orientedDevice.outputWidth / orientedDevice.outputHeight; + const cornerX = `${(profile.display.cornerRadiusPx / orientedDevice.outputWidth) * 100}%`; + const cornerY = `${(profile.display.cornerRadiusPx / orientedDevice.outputHeight) * 100}%`; return (
@@ -171,8 +174,14 @@ export function DevicePreview() { />
@@ -184,18 +193,23 @@ export function DevicePreview() {
- {isMac && frameVisible ? ( + {isMac && !isMacBook && frameVisible ? (
) : null} - {isMac && frameVisible ? ( + {isMac && !isMacBook && frameVisible ? (
) : null} + {isMacBook && frameVisible ? ( +
+ +
+ ) : null} {!isMac && frameVisible ? ( <> diff --git a/src/data/devices/apple/profiles.ts b/src/data/devices/apple/profiles.ts index fc907a0..769f7ce 100644 --- a/src/data/devices/apple/profiles.ts +++ b/src/data/devices/apple/profiles.ts @@ -1,10 +1,13 @@ import type { DeviceProfile, Rect } from "../../../types/device"; -const VERIFIED = "2026-07-13"; -const PHONE_SOURCE = "https://support.apple.com/specs/iphone"; -const IPAD_SOURCE = "https://support.apple.com/specs/ipad"; -const MAC_SOURCE = "https://support.apple.com/specs/mac"; +const VERIFIED = "2026-07-16"; +const PHONE_SOURCE = "https://support.apple.com/en-hk/108044"; +const IPAD_SOURCE = "https://support.apple.com/en-hk/108043"; +const MACBOOK_AIR_SOURCE = "https://support.apple.com/en-hk/102869"; +const MACBOOK_PRO_SOURCE = "https://support.apple.com/en-hk/108052"; +const IMAC_SOURCE = "https://support.apple.com/en-hk/108054"; const DISPLAY_SOURCE = "https://support.apple.com/displays"; +const MACBOOK_NEO_SOURCE = "https://support.apple.com/en-hk/126322"; function rect(x: number, y: number, width: number, height: number): Rect { return { x, y, width, height }; @@ -13,7 +16,6 @@ function rect(x: number, y: number, width: number, height: number): Rect { type PhoneInput = { id: string; model: string; - slug: string; year: number; width: number; height: number; @@ -27,6 +29,8 @@ type PhoneInput = { cutoutBounds?: Rect; safeTop: number; safeBottom: number; + dpr?: number; + sourceUrl?: string; }; function phone(input: PhoneInput): DeviceProfile { @@ -38,7 +42,7 @@ function phone(input: PhoneInput): DeviceProfile { category: "iphone", family: "iPhone", model: input.model, - slug: input.slug, + slug: input.id, releaseYear: input.year, supportedOrientations: ["portrait", "landscape"], chassis: { @@ -52,7 +56,7 @@ function phone(input: PhoneInput): DeviceProfile { physicalHeightPx: input.height, logicalWidthPt: input.logicalWidth, logicalHeightPt: input.logicalHeight, - devicePixelRatio: input.width / input.logicalWidth, + devicePixelRatio: input.dpr ?? input.width / input.logicalWidth, aspectRatio: input.width / input.height, orientation: "portrait", cornerRadiusPx: input.corner, @@ -87,7 +91,7 @@ function phone(input: PhoneInput): DeviceProfile { notes: ["System wallpaper placement can vary by iOS version and user settings."], }, metadata: { - sourceUrls: [PHONE_SOURCE], + sourceUrls: [input.sourceUrl ?? PHONE_SOURCE], lastVerified: VERIFIED, accuracy: "high", notes: [ @@ -101,7 +105,6 @@ const iphones: DeviceProfile[] = [ phone({ id: "iphone-se-2", model: "iPhone SE (2nd gen)", - slug: "iphone-se-2", year: 2020, width: 750, height: 1334, @@ -118,7 +121,6 @@ const iphones: DeviceProfile[] = [ phone({ id: "iphone-12-mini", model: "iPhone 12 mini", - slug: "iphone-12-mini", year: 2020, width: 1080, height: 2340, @@ -136,7 +138,6 @@ const iphones: DeviceProfile[] = [ phone({ id: "iphone-12", model: "iPhone 12", - slug: "iphone-12", year: 2020, width: 1170, height: 2532, @@ -154,7 +155,6 @@ const iphones: DeviceProfile[] = [ phone({ id: "iphone-12-pro-max", model: "iPhone 12 Pro Max", - slug: "iphone-12-pro-max", year: 2020, width: 1284, height: 2778, @@ -172,7 +172,6 @@ const iphones: DeviceProfile[] = [ phone({ id: "iphone-13-mini", model: "iPhone 13 mini", - slug: "iphone-13-mini", year: 2021, width: 1080, height: 2340, @@ -186,11 +185,11 @@ const iphones: DeviceProfile[] = [ cutoutBounds: rect(350, 0, 380, 102), safeTop: 150, safeBottom: 102, + dpr: 3, }), phone({ id: "iphone-13", model: "iPhone 13", - slug: "iphone-13", year: 2021, width: 1170, height: 2532, @@ -205,10 +204,94 @@ const iphones: DeviceProfile[] = [ safeTop: 141, safeBottom: 102, }), + phone({ + id: "iphone-13-pro", + model: "iPhone 13 Pro", + year: 2021, + width: 1170, + height: 2532, + logicalWidth: 390, + logicalHeight: 844, + diagonal: 6.1, + bodyWidth: 71.5, + bodyHeight: 146.7, + corner: 132, + cutout: "notch", + cutoutBounds: rect(380, 0, 410, 108), + safeTop: 141, + safeBottom: 102, + }), + phone({ + id: "iphone-13-pro-max", + model: "iPhone 13 Pro Max", + year: 2021, + width: 1284, + height: 2778, + logicalWidth: 428, + logicalHeight: 926, + diagonal: 6.7, + bodyWidth: 78.1, + bodyHeight: 160.8, + corner: 144, + cutout: "notch", + cutoutBounds: rect(417, 0, 450, 116), + safeTop: 141, + safeBottom: 102, + }), + phone({ + id: "iphone-se-3", + model: "iPhone SE (3rd gen)", + year: 2022, + width: 750, + height: 1334, + logicalWidth: 375, + logicalHeight: 667, + diagonal: 4.7, + bodyWidth: 67.3, + bodyHeight: 138.4, + corner: 0, + cutout: "none", + safeTop: 40, + safeBottom: 0, + sourceUrl: "https://support.apple.com/en-hk/111866", + }), + phone({ + id: "iphone-14", + model: "iPhone 14", + year: 2022, + width: 1170, + height: 2532, + logicalWidth: 390, + logicalHeight: 844, + diagonal: 6.1, + bodyWidth: 71.5, + bodyHeight: 146.7, + corner: 132, + cutout: "notch", + cutoutBounds: rect(380, 0, 410, 108), + safeTop: 141, + safeBottom: 102, + }), + phone({ + id: "iphone-14-plus", + model: "iPhone 14 Plus", + year: 2022, + width: 1284, + height: 2778, + logicalWidth: 428, + logicalHeight: 926, + diagonal: 6.7, + bodyWidth: 78.1, + bodyHeight: 160.8, + corner: 144, + cutout: "notch", + cutoutBounds: rect(417, 0, 450, 116), + safeTop: 141, + safeBottom: 102, + }), phone({ id: "iphone-14-pro", model: "iPhone 14 Pro", - slug: "iphone-14-pro", year: 2022, width: 1179, height: 2556, @@ -226,7 +309,6 @@ const iphones: DeviceProfile[] = [ phone({ id: "iphone-14-pro-max", model: "iPhone 14 Pro Max", - slug: "iphone-14-pro-max", year: 2022, width: 1290, height: 2796, @@ -244,7 +326,6 @@ const iphones: DeviceProfile[] = [ phone({ id: "iphone-15", model: "iPhone 15", - slug: "iphone-15", year: 2023, width: 1179, height: 2556, @@ -262,7 +343,6 @@ const iphones: DeviceProfile[] = [ phone({ id: "iphone-15-pro", model: "iPhone 15 Pro", - slug: "iphone-15-pro", year: 2023, width: 1179, height: 2556, @@ -280,7 +360,6 @@ const iphones: DeviceProfile[] = [ phone({ id: "iphone-15-plus", model: "iPhone 15 Plus", - slug: "iphone-15-plus", year: 2023, width: 1290, height: 2796, @@ -298,7 +377,6 @@ const iphones: DeviceProfile[] = [ phone({ id: "iphone-15-pro-max", model: "iPhone 15 Pro Max", - slug: "iphone-15-pro-max", year: 2023, width: 1290, height: 2796, @@ -313,11 +391,188 @@ const iphones: DeviceProfile[] = [ safeTop: 177, safeBottom: 102, }), + phone({ + id: "iphone-16", + model: "iPhone 16", + year: 2024, + width: 1179, + height: 2556, + logicalWidth: 393, + logicalHeight: 852, + diagonal: 6.1, + bodyWidth: 71.6, + bodyHeight: 147.6, + corner: 138, + cutout: "dynamic-island", + cutoutBounds: rect(466, 33, 247, 90), + safeTop: 177, + safeBottom: 102, + }), + phone({ + id: "iphone-16-plus", + model: "iPhone 16 Plus", + year: 2024, + width: 1290, + height: 2796, + logicalWidth: 430, + logicalHeight: 932, + diagonal: 6.7, + bodyWidth: 77.8, + bodyHeight: 160.9, + corner: 150, + cutout: "dynamic-island", + cutoutBounds: rect(521, 36, 248, 90), + safeTop: 177, + safeBottom: 102, + }), + phone({ + id: "iphone-16-pro", + model: "iPhone 16 Pro", + year: 2024, + width: 1206, + height: 2622, + logicalWidth: 402, + logicalHeight: 874, + diagonal: 6.3, + bodyWidth: 71.5, + bodyHeight: 149.6, + corner: 140, + cutout: "dynamic-island", + cutoutBounds: rect(480, 33, 246, 90), + safeTop: 177, + safeBottom: 102, + sourceUrl: "https://support.apple.com/en-hk/121031", + }), + phone({ + id: "iphone-16-pro-max", + model: "iPhone 16 Pro Max", + year: 2024, + width: 1320, + height: 2868, + logicalWidth: 440, + logicalHeight: 956, + diagonal: 6.9, + bodyWidth: 77.6, + bodyHeight: 163, + corner: 154, + cutout: "dynamic-island", + cutoutBounds: rect(536, 36, 248, 90), + safeTop: 177, + safeBottom: 102, + sourceUrl: "https://support.apple.com/en-hk/121032", + }), + phone({ + id: "iphone-16e", + model: "iPhone 16e", + year: 2025, + width: 1170, + height: 2532, + logicalWidth: 390, + logicalHeight: 844, + diagonal: 6.1, + bodyWidth: 71.5, + bodyHeight: 146.7, + corner: 132, + cutout: "notch", + cutoutBounds: rect(340, 0, 490, 108), + safeTop: 141, + safeBottom: 102, + }), + phone({ + id: "iphone-17", + model: "iPhone 17", + year: 2025, + width: 1206, + height: 2622, + logicalWidth: 402, + logicalHeight: 874, + diagonal: 6.3, + bodyWidth: 71.5, + bodyHeight: 149.6, + corner: 140, + cutout: "dynamic-island", + cutoutBounds: rect(480, 33, 246, 90), + safeTop: 177, + safeBottom: 102, + sourceUrl: "https://support.apple.com/en-hk/125089", + }), + phone({ + id: "iphone-air", + model: "iPhone Air", + year: 2025, + width: 1260, + height: 2736, + logicalWidth: 420, + logicalHeight: 912, + diagonal: 6.5, + bodyWidth: 74.7, + bodyHeight: 156.2, + corner: 146, + cutout: "dynamic-island", + cutoutBounds: rect(506, 34, 248, 90), + safeTop: 177, + safeBottom: 102, + sourceUrl: "https://support.apple.com/en-hk/125092", + }), + phone({ + id: "iphone-17-pro", + model: "iPhone 17 Pro", + year: 2025, + width: 1206, + height: 2622, + logicalWidth: 402, + logicalHeight: 874, + diagonal: 6.3, + bodyWidth: 71.9, + bodyHeight: 150, + corner: 140, + cutout: "dynamic-island", + cutoutBounds: rect(480, 33, 246, 90), + safeTop: 177, + safeBottom: 102, + sourceUrl: "https://support.apple.com/en-hk/125090", + }), + phone({ + id: "iphone-17-pro-max", + model: "iPhone 17 Pro Max", + year: 2025, + width: 1320, + height: 2868, + logicalWidth: 440, + logicalHeight: 956, + diagonal: 6.9, + bodyWidth: 78, + bodyHeight: 163.4, + corner: 154, + cutout: "dynamic-island", + cutoutBounds: rect(536, 36, 248, 90), + safeTop: 177, + safeBottom: 102, + sourceUrl: "https://support.apple.com/en-hk/125091", + }), + phone({ + id: "iphone-17e", + model: "iPhone 17e", + year: 2026, + width: 1170, + height: 2532, + logicalWidth: 390, + logicalHeight: 844, + diagonal: 6.1, + bodyWidth: 71.5, + bodyHeight: 146.7, + corner: 132, + cutout: "notch", + cutoutBounds: rect(340, 0, 490, 108), + safeTop: 141, + safeBottom: 102, + sourceUrl: "https://support.apple.com/en-hk/126470", + }), ]; type TabletInput = { + id: string; model: string; - slug: string; year: number; width: number; height: number; @@ -327,24 +582,27 @@ type TabletInput = { diagonal: number; bodyWidth: number; bodyHeight: number; + corner?: number; + classic?: boolean; + sourceUrl?: string; }; function tablet(input: TabletInput): DeviceProfile { return { - id: `apple-${input.slug}`, + id: `apple-${input.id}`, brand: "Apple", platform: "iPadOS", category: "ipad", family: "iPad", model: input.model, - slug: input.slug, + slug: input.id, releaseYear: input.year, supportedOrientations: ["portrait", "landscape"], chassis: { physicalWidthMm: input.bodyWidth, physicalHeightMm: input.bodyHeight, screenDiagonalInches: input.diagonal, - bezelStyle: "edge-to-edge", + bezelStyle: input.classic ? "classic" : "edge-to-edge", }, display: { physicalWidthPx: input.width, @@ -354,13 +612,15 @@ function tablet(input: TabletInput): DeviceProfile { devicePixelRatio: input.dpr, aspectRatio: input.width / input.height, orientation: "portrait", - cornerRadiusPx: 52, + cornerRadiusPx: input.corner ?? 52, }, cutout: { type: "none" }, safeArea: { insetsPx: { top: 72, right: 54, bottom: 60, left: 54 }, source: "derived" }, overlays: { statusBar: rect(0, 0, input.width, 72), - homeIndicator: rect(input.width * 0.41, input.height - 34, input.width * 0.18, 12), + homeIndicator: input.classic + ? undefined + : rect(input.width * 0.41, input.height - 34, input.width * 0.18, 12), }, wallpaperBehavior: { systemMayZoom: true, @@ -368,7 +628,7 @@ function tablet(input: TabletInput): DeviceProfile { notes: ["Portrait and landscape compositions are stored independently in this editor."], }, metadata: { - sourceUrls: [IPAD_SOURCE], + sourceUrls: [input.sourceUrl ?? IPAD_SOURCE], lastVerified: VERIFIED, accuracy: "high", notes: ["Published resolution with derived safe-area geometry."], @@ -378,8 +638,23 @@ function tablet(input: TabletInput): DeviceProfile { const ipads: DeviceProfile[] = [ tablet({ + id: "ipad-9", + model: "iPad (9th gen)", + year: 2021, + width: 1620, + height: 2160, + logicalWidth: 810, + logicalHeight: 1080, + dpr: 2, + diagonal: 10.2, + bodyWidth: 174.1, + bodyHeight: 250.6, + corner: 0, + classic: true, + }), + tablet({ + id: "ipad-mini-6", model: "iPad mini (6th gen)", - slug: "ipad-mini-6", year: 2021, width: 1488, height: 2266, @@ -389,10 +664,37 @@ const ipads: DeviceProfile[] = [ diagonal: 8.3, bodyWidth: 134.8, bodyHeight: 195.4, + corner: 54, }), tablet({ + id: "ipad-pro-11-3", + model: "iPad Pro 11-inch (3rd gen)", + year: 2021, + width: 1668, + height: 2388, + logicalWidth: 834, + logicalHeight: 1194, + dpr: 2, + diagonal: 11, + bodyWidth: 178.5, + bodyHeight: 247.6, + }), + tablet({ + id: "ipad-pro-12-9-5", + model: "iPad Pro 12.9-inch (5th gen)", + year: 2021, + width: 2048, + height: 2732, + logicalWidth: 1024, + logicalHeight: 1366, + dpr: 2, + diagonal: 12.9, + bodyWidth: 214.9, + bodyHeight: 280.6, + }), + tablet({ + id: "ipad-10", model: "iPad (10th gen)", - slug: "ipad-10", year: 2022, width: 1640, height: 2360, @@ -404,8 +706,61 @@ const ipads: DeviceProfile[] = [ bodyHeight: 248.6, }), tablet({ + id: "ipad-air-5", + model: "iPad Air (5th gen)", + year: 2022, + width: 1640, + height: 2360, + logicalWidth: 820, + logicalHeight: 1180, + dpr: 2, + diagonal: 10.9, + bodyWidth: 178.5, + bodyHeight: 247.6, + }), + tablet({ + id: "ipad-pro-11-4", + model: "iPad Pro 11-inch (4th gen)", + year: 2022, + width: 1668, + height: 2388, + logicalWidth: 834, + logicalHeight: 1194, + dpr: 2, + diagonal: 11, + bodyWidth: 178.5, + bodyHeight: 247.6, + }), + tablet({ + id: "ipad-pro-12-9-6", + model: "iPad Pro 12.9-inch (6th gen)", + year: 2022, + width: 2048, + height: 2732, + logicalWidth: 1024, + logicalHeight: 1366, + dpr: 2, + diagonal: 12.9, + bodyWidth: 214.9, + bodyHeight: 280.6, + }), + tablet({ + id: "ipad-mini-a17-pro", + model: "iPad mini (A17 Pro)", + year: 2024, + width: 1488, + height: 2266, + logicalWidth: 744, + logicalHeight: 1133, + dpr: 2, + diagonal: 8.3, + bodyWidth: 134.8, + bodyHeight: 195.4, + corner: 54, + }), + tablet({ + id: "ipad-air-11-m2", model: "iPad Air 11-inch (M2)", - slug: "ipad-air-11-m2", year: 2024, width: 1640, height: 2360, @@ -417,8 +772,21 @@ const ipads: DeviceProfile[] = [ bodyHeight: 247.6, }), tablet({ + id: "ipad-air-13-m2", + model: "iPad Air 13-inch (M2)", + year: 2024, + width: 2048, + height: 2732, + logicalWidth: 1024, + logicalHeight: 1366, + dpr: 2, + diagonal: 13, + bodyWidth: 214.9, + bodyHeight: 280.6, + }), + tablet({ + id: "ipad-pro-11-m4", model: "iPad Pro 11-inch (M4)", - slug: "ipad-pro-11-m4", year: 2024, width: 1668, height: 2420, @@ -428,10 +796,11 @@ const ipads: DeviceProfile[] = [ diagonal: 11, bodyWidth: 177.5, bodyHeight: 249.7, + corner: 48, }), tablet({ + id: "ipad-pro-13-m4", model: "iPad Pro 13-inch (M4)", - slug: "ipad-pro-13-m4", year: 2024, width: 2064, height: 2752, @@ -441,12 +810,108 @@ const ipads: DeviceProfile[] = [ diagonal: 13, bodyWidth: 215.5, bodyHeight: 281.6, + corner: 48, + }), + tablet({ + id: "ipad-a16", + model: "iPad (A16)", + year: 2025, + width: 1640, + height: 2360, + logicalWidth: 820, + logicalHeight: 1180, + dpr: 2, + diagonal: 11, + bodyWidth: 179.5, + bodyHeight: 248.6, + }), + tablet({ + id: "ipad-air-11-m3", + model: "iPad Air 11-inch (M3)", + year: 2025, + width: 1640, + height: 2360, + logicalWidth: 820, + logicalHeight: 1180, + dpr: 2, + diagonal: 11, + bodyWidth: 178.5, + bodyHeight: 247.6, + }), + tablet({ + id: "ipad-air-13-m3", + model: "iPad Air 13-inch (M3)", + year: 2025, + width: 2048, + height: 2732, + logicalWidth: 1024, + logicalHeight: 1366, + dpr: 2, + diagonal: 13, + bodyWidth: 214.9, + bodyHeight: 280.6, + }), + tablet({ + id: "ipad-pro-11-m5", + model: "iPad Pro 11-inch (M5)", + year: 2025, + width: 1668, + height: 2420, + logicalWidth: 834, + logicalHeight: 1210, + dpr: 2, + diagonal: 11, + bodyWidth: 177.5, + bodyHeight: 249.7, + corner: 48, + sourceUrl: "https://support.apple.com/en-hk/125406", + }), + tablet({ + id: "ipad-pro-13-m5", + model: "iPad Pro 13-inch (M5)", + year: 2025, + width: 2064, + height: 2752, + logicalWidth: 1032, + logicalHeight: 1376, + dpr: 2, + diagonal: 13, + bodyWidth: 215.5, + bodyHeight: 281.6, + corner: 48, + }), + tablet({ + id: "ipad-air-11-m4", + model: "iPad Air 11-inch (M4)", + year: 2026, + width: 1640, + height: 2360, + logicalWidth: 820, + logicalHeight: 1180, + dpr: 2, + diagonal: 11, + bodyWidth: 178.5, + bodyHeight: 247.6, + sourceUrl: "https://support.apple.com/en-hk/126471", + }), + tablet({ + id: "ipad-air-13-m4", + model: "iPad Air 13-inch (M4)", + year: 2026, + width: 2048, + height: 2732, + logicalWidth: 1024, + logicalHeight: 1366, + dpr: 2, + diagonal: 13, + bodyWidth: 214.9, + bodyHeight: 280.6, }), ]; type MacInput = { + id: string; model: string; - slug: string; year: number; category: "macbook" | "imac" | "display"; width: number; @@ -455,22 +920,22 @@ type MacInput = { bodyWidth: number; bodyHeight: number; notch: boolean; + sourceUrl: string; }; function mac(input: MacInput): DeviceProfile { - const source = input.category === "display" ? DISPLAY_SOURCE : MAC_SOURCE; const menuHeight = Math.round(input.height * 0.035); const dockHeight = Math.round(input.height * 0.09); const notchWidth = Math.round(input.width * 0.085); return { - id: `apple-${input.slug}`, + id: `apple-${input.id}`, brand: "Apple", platform: "macOS", category: input.category, family: input.category === "display" ? "Display" : input.category === "imac" ? "iMac" : "MacBook", model: input.model, - slug: input.slug, + slug: input.id, releaseYear: input.year, supportedOrientations: ["landscape"], chassis: { @@ -516,7 +981,7 @@ function mac(input: MacInput): DeviceProfile { ], }, metadata: { - sourceUrls: [source], + sourceUrls: [input.sourceUrl], lastVerified: VERIFIED, accuracy: "high", notes: [ @@ -528,8 +993,177 @@ function mac(input: MacInput): DeviceProfile { const macs: DeviceProfile[] = [ mac({ + id: "macbook-pro-14-m1-pro-max", + model: "MacBook Pro 14-inch (M1 Pro/Max)", + year: 2021, + category: "macbook", + width: 3024, + height: 1964, + diagonal: 14.2, + bodyWidth: 312.6, + bodyHeight: 221.2, + notch: true, + sourceUrl: MACBOOK_PRO_SOURCE, + }), + mac({ + id: "macbook-pro-16-m1-pro-max", + model: "MacBook Pro 16-inch (M1 Pro/Max)", + year: 2021, + category: "macbook", + width: 3456, + height: 2234, + diagonal: 16.2, + bodyWidth: 355.7, + bodyHeight: 248.1, + notch: true, + sourceUrl: MACBOOK_PRO_SOURCE, + }), + mac({ + id: "imac-24-m1", + model: "iMac 24-inch (M1)", + year: 2021, + category: "imac", + width: 4480, + height: 2520, + diagonal: 23.5, + bodyWidth: 547, + bodyHeight: 461, + notch: false, + sourceUrl: IMAC_SOURCE, + }), + mac({ + id: "macbook-air-13-m2", + model: "MacBook Air 13-inch (M2)", + year: 2022, + category: "macbook", + width: 2560, + height: 1664, + diagonal: 13.6, + bodyWidth: 304.1, + bodyHeight: 215, + notch: true, + sourceUrl: MACBOOK_AIR_SOURCE, + }), + mac({ + id: "macbook-pro-13-m2", + model: "MacBook Pro 13-inch (M2)", + year: 2022, + category: "macbook", + width: 2560, + height: 1600, + diagonal: 13.3, + bodyWidth: 304.1, + bodyHeight: 212.4, + notch: false, + sourceUrl: MACBOOK_PRO_SOURCE, + }), + mac({ + id: "studio-display", + model: "Studio Display", + year: 2022, + category: "display", + width: 5120, + height: 2880, + diagonal: 27, + bodyWidth: 623, + bodyHeight: 478, + notch: false, + sourceUrl: DISPLAY_SOURCE, + }), + mac({ + id: "macbook-air-15-m2", + model: "MacBook Air 15-inch (M2)", + year: 2023, + category: "macbook", + width: 2880, + height: 1864, + diagonal: 15.3, + bodyWidth: 340.4, + bodyHeight: 237.6, + notch: true, + sourceUrl: MACBOOK_AIR_SOURCE, + }), + mac({ + id: "macbook-pro-14-m2-pro-max", + model: "MacBook Pro 14-inch (M2 Pro/Max)", + year: 2023, + category: "macbook", + width: 3024, + height: 1964, + diagonal: 14.2, + bodyWidth: 312.6, + bodyHeight: 221.2, + notch: true, + sourceUrl: MACBOOK_PRO_SOURCE, + }), + mac({ + id: "macbook-pro-16-m2-pro-max", + model: "MacBook Pro 16-inch (M2 Pro/Max)", + year: 2023, + category: "macbook", + width: 3456, + height: 2234, + diagonal: 16.2, + bodyWidth: 355.7, + bodyHeight: 248.1, + notch: true, + sourceUrl: MACBOOK_PRO_SOURCE, + }), + mac({ + id: "macbook-pro-14-m3", + model: "MacBook Pro 14-inch (M3)", + year: 2023, + category: "macbook", + width: 3024, + height: 1964, + diagonal: 14.2, + bodyWidth: 312.6, + bodyHeight: 221.2, + notch: true, + sourceUrl: MACBOOK_PRO_SOURCE, + }), + mac({ + id: "macbook-pro-14-m3-pro-max", + model: "MacBook Pro 14-inch (M3 Pro/Max)", + year: 2023, + category: "macbook", + width: 3024, + height: 1964, + diagonal: 14.2, + bodyWidth: 312.6, + bodyHeight: 221.2, + notch: true, + sourceUrl: MACBOOK_PRO_SOURCE, + }), + mac({ + id: "macbook-pro-16-m3-pro-max", + model: "MacBook Pro 16-inch (M3 Pro/Max)", + year: 2023, + category: "macbook", + width: 3456, + height: 2234, + diagonal: 16.2, + bodyWidth: 355.7, + bodyHeight: 248.1, + notch: true, + sourceUrl: MACBOOK_PRO_SOURCE, + }), + mac({ + id: "imac-24-m3", + model: "iMac 24-inch (M3)", + year: 2023, + category: "imac", + width: 4480, + height: 2520, + diagonal: 23.5, + bodyWidth: 547, + bodyHeight: 461, + notch: false, + sourceUrl: IMAC_SOURCE, + }), + mac({ + id: "macbook-air-13-m3", model: "MacBook Air 13-inch (M3)", - slug: "macbook-air-13-m3", year: 2024, category: "macbook", width: 2560, @@ -538,10 +1172,11 @@ const macs: DeviceProfile[] = [ bodyWidth: 304.1, bodyHeight: 215, notch: true, + sourceUrl: MACBOOK_AIR_SOURCE, }), mac({ + id: "macbook-air-15-m3", model: "MacBook Air 15-inch (M3)", - slug: "macbook-air-15-m3", year: 2024, category: "macbook", width: 2880, @@ -550,11 +1185,12 @@ const macs: DeviceProfile[] = [ bodyWidth: 340.4, bodyHeight: 237.6, notch: true, + sourceUrl: MACBOOK_AIR_SOURCE, }), mac({ - model: "MacBook Pro 14-inch", - slug: "macbook-pro-14", - year: 2023, + id: "macbook-pro-14-m4", + model: "MacBook Pro 14-inch (M4)", + year: 2024, category: "macbook", width: 3024, height: 1964, @@ -562,11 +1198,25 @@ const macs: DeviceProfile[] = [ bodyWidth: 312.6, bodyHeight: 221.2, notch: true, + sourceUrl: MACBOOK_PRO_SOURCE, }), mac({ - model: "MacBook Pro 16-inch", - slug: "macbook-pro-16", - year: 2023, + id: "macbook-pro-14-m4-pro-max", + model: "MacBook Pro 14-inch (M4 Pro/Max)", + year: 2024, + category: "macbook", + width: 3024, + height: 1964, + diagonal: 14.2, + bodyWidth: 312.6, + bodyHeight: 221.2, + notch: true, + sourceUrl: MACBOOK_PRO_SOURCE, + }), + mac({ + id: "macbook-pro-16-m4-pro-max", + model: "MacBook Pro 16-inch (M4 Pro/Max)", + year: 2024, category: "macbook", width: 3456, height: 2234, @@ -574,11 +1224,12 @@ const macs: DeviceProfile[] = [ bodyWidth: 355.7, bodyHeight: 248.1, notch: true, + sourceUrl: MACBOOK_PRO_SOURCE, }), mac({ - model: "iMac 24-inch", - slug: "imac-24", - year: 2023, + id: "imac-24-m4", + model: "iMac 24-inch (M4)", + year: 2024, category: "imac", width: 4480, height: 2520, @@ -586,18 +1237,111 @@ const macs: DeviceProfile[] = [ bodyWidth: 547, bodyHeight: 461, notch: false, + sourceUrl: IMAC_SOURCE, }), mac({ - model: "Studio Display", - slug: "studio-display", - year: 2022, - category: "display", - width: 5120, - height: 2880, - diagonal: 27, - bodyWidth: 623, - bodyHeight: 478, + id: "macbook-air-13-m4", + model: "MacBook Air 13-inch (M4)", + year: 2025, + category: "macbook", + width: 2560, + height: 1664, + diagonal: 13.6, + bodyWidth: 304.1, + bodyHeight: 215, + notch: true, + sourceUrl: MACBOOK_AIR_SOURCE, + }), + mac({ + id: "macbook-air-15-m4", + model: "MacBook Air 15-inch (M4)", + year: 2025, + category: "macbook", + width: 2880, + height: 1864, + diagonal: 15.3, + bodyWidth: 340.4, + bodyHeight: 237.6, + notch: true, + sourceUrl: MACBOOK_AIR_SOURCE, + }), + mac({ + id: "macbook-pro-14-m5", + model: "MacBook Pro 14-inch (M5)", + year: 2025, + category: "macbook", + width: 3024, + height: 1964, + diagonal: 14.2, + bodyWidth: 312.6, + bodyHeight: 221.2, + notch: true, + sourceUrl: MACBOOK_PRO_SOURCE, + }), + mac({ + id: "macbook-neo", + model: "MacBook Neo", + year: 2026, + category: "macbook", + width: 2408, + height: 1506, + diagonal: 13, + bodyWidth: 297.5, + bodyHeight: 206.4, notch: false, + sourceUrl: MACBOOK_NEO_SOURCE, + }), + mac({ + id: "macbook-air-13-m5", + model: "MacBook Air 13-inch (M5)", + year: 2026, + category: "macbook", + width: 2560, + height: 1664, + diagonal: 13.6, + bodyWidth: 304.1, + bodyHeight: 215, + notch: true, + sourceUrl: MACBOOK_AIR_SOURCE, + }), + mac({ + id: "macbook-air-15-m5", + model: "MacBook Air 15-inch (M5)", + year: 2026, + category: "macbook", + width: 2880, + height: 1864, + diagonal: 15.3, + bodyWidth: 340.4, + bodyHeight: 237.6, + notch: true, + sourceUrl: MACBOOK_AIR_SOURCE, + }), + mac({ + id: "macbook-pro-14-m5-pro-max", + model: "MacBook Pro 14-inch (M5 Pro/Max)", + year: 2026, + category: "macbook", + width: 3024, + height: 1964, + diagonal: 14.2, + bodyWidth: 312.6, + bodyHeight: 221.2, + notch: true, + sourceUrl: MACBOOK_PRO_SOURCE, + }), + mac({ + id: "macbook-pro-16-m5-pro-max", + model: "MacBook Pro 16-inch (M5 Pro/Max)", + year: 2026, + category: "macbook", + width: 3456, + height: 2234, + diagonal: 16.2, + bodyWidth: 355.7, + bodyHeight: 248.1, + notch: true, + sourceUrl: MACBOOK_PRO_SOURCE, }), ]; diff --git a/src/styles/index.css b/src/styles/index.css index 724635c..db0c74a 100644 --- a/src/styles/index.css +++ b/src/styles/index.css @@ -861,6 +861,10 @@ input[type="range"]::-webkit-slider-thumb { border-radius: 12px; background: linear-gradient(145deg, #30363d, #07090c 50%, #333942); } +.is-macbook .device-shell { + padding: 8px; + border-radius: 11px 11px 6px 6px; +} .screen-only .device-shell { padding: 0; border-color: transparent; @@ -875,14 +879,14 @@ input[type="range"]::-webkit-slider-thumb { } .screen-bezel { overflow: hidden; - border-radius: 11.2% / 5.2%; + border-radius: var(--screen-corner-x, 11.2%) / var(--screen-corner-y, 5.2%); background: #000; } .is-ipad .screen-bezel { - border-radius: 4%; + border-radius: var(--screen-corner-x, 4%) / var(--screen-corner-y, 4%); } .is-mac .screen-bezel { - border-radius: 6px; + border-radius: var(--screen-corner-x, 6px) / var(--screen-corner-y, 6px); } .device-screen { position: relative; @@ -1147,6 +1151,27 @@ input[type="range"]::-webkit-slider-thumb { border-radius: 50%; background: #30363d; } +.laptop-base { + position: absolute; + top: calc(100% - 2px); + left: -5%; + width: 110%; + height: 5.5%; + min-height: 7px; + border-radius: 2px 2px 10px 10px; + background: linear-gradient(180deg, #8e969e 0, #363d45 42%, #171b20 100%); + box-shadow: 0 5px 8px rgba(0, 0, 0, 0.38); + clip-path: polygon(4% 0, 96% 0, 100% 52%, 96% 100%, 4% 100%, 0 52%); +} +.laptop-base i { + position: absolute; + top: 0; + left: 43%; + width: 14%; + height: 42%; + border-radius: 0 0 8px 8px; + background: rgba(8, 10, 13, 0.72); +} .stage-hint { display: flex; align-items: center; @@ -1806,6 +1831,9 @@ input:checked + .switch::after { .is-mac .device-shell { padding: 5px 5px 14px; } + .is-macbook .device-shell { + padding: 5px; + } .computer-chin { height: 13px; } diff --git a/tests/integration/editor-controls.test.tsx b/tests/integration/editor-controls.test.tsx index 3ef35b0..d26dd66 100644 --- a/tests/integration/editor-controls.test.tsx +++ b/tests/integration/editor-controls.test.tsx @@ -4,6 +4,7 @@ import { describe, expect, it } from "vitest"; import { AdjustmentControls } from "../../src/components/editor-controls/AdjustmentControls"; import { DeviceSelector } from "../../src/components/device-selector/DeviceSelector"; import { OverlayPanel } from "../../src/components/overlays/OverlayPanel"; +import { DevicePreview } from "../../src/components/preview/DevicePreview"; import { I18nProvider } from "../../src/i18n/i18n"; import { EditorProvider } from "../../src/state/editor-context"; @@ -31,28 +32,44 @@ describe("editor controls", () => { const search = screen.getByPlaceholderText("搜尋型號、年份或解析度…"); await user.type(search, "1290"); - expect(screen.getByText("3 個結果")).toBeInTheDocument(); + expect(screen.getByText("4 個結果")).toBeInTheDocument(); expect(screen.getByRole("option", { name: /iPhone 15 Pro Max,2023/ })).toBeInTheDocument(); await user.type(search, "{Escape}"); expect(search).toHaveValue(""); - expect(screen.getByText("12 個結果")).toBeInTheDocument(); + expect(screen.getByText("27 個結果")).toBeInTheDocument(); }); it("shows the selected device again after browsing another category", async () => { const user = userEvent.setup(); renderWithEditor(); - await user.click(screen.getByRole("button", { name: "iPad · 5" })); - expect(screen.getByText("5 個結果")).toBeInTheDocument(); + await user.click(screen.getByRole("button", { name: "iPad · 20" })); + expect(screen.getByText("20 個結果")).toBeInTheDocument(); await user.click(screen.getByRole("button", { name: /目前裝置.*iPhone 15 Pro/ })); - expect(screen.getByRole("button", { name: "iPhone · 12" })).toHaveAttribute( + expect(screen.getByRole("button", { name: "iPhone · 27" })).toHaveAttribute( "aria-pressed", "true", ); }); + it("renders MacBooks as laptops instead of desktop displays", async () => { + const user = userEvent.setup(); + const { container } = renderWithEditor( + <> + + + , + ); + + await user.click(screen.getByRole("button", { name: "Mac · 27" })); + await user.click(screen.getByRole("option", { name: /MacBook Neo,2026/ })); + + expect(container.querySelector(".laptop-base")).toBeInTheDocument(); + expect(container.querySelector(".computer-stand")).not.toBeInTheDocument(); + }); + it("updates fit, zoom, and background controls", async () => { const user = userEvent.setup(); renderWithEditor(); diff --git a/tests/unit/profiles.test.ts b/tests/unit/profiles.test.ts index 9448139..9f7521a 100644 --- a/tests/unit/profiles.test.ts +++ b/tests/unit/profiles.test.ts @@ -3,12 +3,48 @@ import { deviceProfiles } from "../../src/data/devices"; import { validateDeviceProfile, validateDeviceProfiles } from "../../src/core/validation"; describe("Apple device profiles", () => { - it("meets MVP representative profile counts", () => { - expect(deviceProfiles.filter((profile) => profile.category === "iphone")).toHaveLength(12); - expect(deviceProfiles.filter((profile) => profile.category === "ipad")).toHaveLength(5); + it("covers every requested Apple display model from the target years", () => { + expect(deviceProfiles.filter((profile) => profile.category === "iphone")).toHaveLength(27); + expect(deviceProfiles.filter((profile) => profile.category === "ipad")).toHaveLength(20); expect( deviceProfiles.filter((profile) => ["macbook", "imac", "display"].includes(profile.category)), - ).toHaveLength(6); + ).toHaveLength(27); + + for (const id of [ + "apple-iphone-13-pro-max", + "apple-iphone-se-3", + "apple-iphone-16-pro-max", + "apple-iphone-air", + "apple-iphone-17e", + "apple-ipad-9", + "apple-ipad-pro-12-9-6", + "apple-ipad-mini-a17-pro", + "apple-ipad-pro-13-m5", + "apple-ipad-air-13-m4", + "apple-macbook-pro-16-m1-pro-max", + "apple-macbook-pro-13-m2", + "apple-macbook-neo", + "apple-macbook-air-15-m5", + "apple-macbook-pro-16-m5-pro-max", + ]) { + expect( + deviceProfiles.some((profile) => profile.id === id), + id, + ).toBe(true); + } + }); + + it("keeps same-size models distinct when their display configuration differs", () => { + const iphone14 = deviceProfiles.find((profile) => profile.id === "apple-iphone-14"); + const iphone14Pro = deviceProfiles.find((profile) => profile.id === "apple-iphone-14-pro"); + const iphone15 = deviceProfiles.find((profile) => profile.id === "apple-iphone-15"); + const iphone15Pro = deviceProfiles.find((profile) => profile.id === "apple-iphone-15-pro"); + + expect(iphone14?.chassis.screenDiagonalInches).toBe(iphone14Pro?.chassis.screenDiagonalInches); + expect(iphone14?.display.physicalHeightPx).not.toBe(iphone14Pro?.display.physicalHeightPx); + expect(iphone14?.cutout.type).toBe("notch"); + expect(iphone14Pro?.cutout.type).toBe("dynamic-island"); + expect(iphone15?.chassis.physicalWidthMm).not.toBe(iphone15Pro?.chassis.physicalWidthMm); }); it("validates the complete data set", () => { diff --git a/tests/unit/transforms.test.ts b/tests/unit/transforms.test.ts index 4e25d38..d727049 100644 --- a/tests/unit/transforms.test.ts +++ b/tests/unit/transforms.test.ts @@ -12,7 +12,7 @@ describe("device orientation transforms", () => { }); it("does not swap native landscape Macs", () => { - const profile = getDeviceProfile("apple-macbook-pro-14"); + const profile = getDeviceProfile("apple-macbook-pro-14-m1-pro-max"); expect(orientDevice(profile, "landscape").outputWidth).toBe(3024); }); @@ -26,7 +26,7 @@ describe("device orientation transforms", () => { }); it("keeps a native-landscape MacBook notch at the top center", () => { - const profile = getDeviceProfile("apple-macbook-pro-14"); + const profile = getDeviceProfile("apple-macbook-pro-14-m1-pro-max"); expect( orientRect( profile.cutout.boundsPx,