diff --git a/AGENTS.md b/AGENTS.md index d35ad30..4367002 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,7 +2,7 @@ ArtCraft Launcher installs, updates and launches the **Craft App Suite** (PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft, PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, -CADCraft, SoundCraft). It is written in **Rust only** (no JavaScript or TypeScript): the desktop +CADCraft, SoundCraft, FigCraft). It is written in **Rust only** (no JavaScript or TypeScript): the desktop app is native egui/eframe, and the web build is the same Rust compiled to WebAssembly (trunk + wasm-bindgen). **No Tauri, Electron or webview shells**, ever. diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index 6ac0fd2..db7b85a 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -42,6 +42,7 @@ licensed like those apps. Refresh them from the source path, never redraw them. | `assets/app-icons/gridcraft.png` | GridCraft app icon (app icon), 128 px | ArtCraft Team and the GridCraft contributors | [`storytold/gridcraft`](https://github.com/storytold/gridcraft) `assets/app-icon/hicolor/128x128/apps/ai.storyteller.gridcraft.png`, copied unmodified | MIT OR Apache-2.0 (GridCraft's [`LICENSE-MIT`](https://github.com/storytold/gridcraft/blob/main/LICENSE-MIT), [`LICENSE-APACHE`](https://github.com/storytold/gridcraft/blob/main/LICENSE-APACHE)) | | `assets/app-icons/cadcraft.png` | CADCraft app icon (app icon), 128 px | ArtCraft Team and the CADCraft contributors | [`storytold/cadcraft`](https://github.com/storytold/cadcraft) `assets/app-icon/hicolor/128x128/apps/ai.storyteller.cadcraft.png`, copied unmodified | MIT OR Apache-2.0 (CADCraft's [`LICENSE-MIT`](https://github.com/storytold/cadcraft/blob/main/LICENSE-MIT), [`LICENSE-APACHE`](https://github.com/storytold/cadcraft/blob/main/LICENSE-APACHE)) | | `assets/app-icons/soundcraft.png` | SoundCraft app icon (nightingale (placeholder)), 128 px | ArtCraft Team and the SoundCraft contributors | [`storytold/soundcraft`](https://github.com/storytold/soundcraft) `assets/app-icon/hicolor/128x128/apps/ai.storyteller.soundcraft.png`, copied unmodified | MIT OR Apache-2.0 (SoundCraft's [`LICENSE-MIT`](https://github.com/storytold/soundcraft/blob/main/LICENSE-MIT), [`LICENSE-APACHE`](https://github.com/storytold/soundcraft/blob/main/LICENSE-APACHE)) | +| `assets/app-icons/figcraft.png` | FigCraft app icon (chameleon), 128 px | ArtCraft Team and the FigCraft contributors | [`storytold/figcraft`](https://github.com/storytold/figcraft) `assets/app-icon/hicolor/128x128/apps/ai.storyteller.figcraft.png`, copied unmodified | MIT OR Apache-2.0 (FigCraft's [`LICENSE-MIT`](https://github.com/storytold/figcraft/blob/main/LICENSE-MIT), [`LICENSE-APACHE`](https://github.com/storytold/figcraft/blob/main/LICENSE-APACHE)) | ## Documentation and README diff --git a/Cargo.lock b/Cargo.lock index ed8f3c7..120e6b0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -276,7 +276,7 @@ checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" [[package]] name = "artcraft-launcher" -version = "0.4.0" +version = "0.4.1" dependencies = [ "artcraft-launcher-core", "artcraft-launcher-native", @@ -300,7 +300,7 @@ dependencies = [ [[package]] name = "artcraft-launcher-core" -version = "0.4.0" +version = "0.4.1" dependencies = [ "semver", "serde", @@ -309,7 +309,7 @@ dependencies = [ [[package]] name = "artcraft-launcher-native" -version = "0.4.0" +version = "0.4.1" dependencies = [ "artcraft-launcher-core", "dirs 6.0.0", @@ -327,7 +327,7 @@ dependencies = [ [[package]] name = "artcraft-launcher-ui-egui" -version = "0.4.0" +version = "0.4.1" dependencies = [ "artcraft-launcher-core", "egui", @@ -343,7 +343,7 @@ dependencies = [ [[package]] name = "artcraft-launcher-web" -version = "0.4.0" +version = "0.4.1" dependencies = [ "artcraft-launcher-core", "artcraft-launcher-ui-egui", @@ -5803,7 +5803,7 @@ checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" [[package]] name = "xtask" -version = "0.4.0" +version = "0.4.1" [[package]] name = "yoke" diff --git a/Cargo.toml b/Cargo.toml index a7862b5..99be343 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ resolver = "3" members = ["crates/*", "apps/*", "xtask"] [workspace.package] -version = "0.4.0" +version = "0.4.1" edition = "2024" license = "MIT OR Apache-2.0" rust-version = "1.90" diff --git a/README.md b/README.md index 2a06cb0..2a3b6f6 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@

One place to install, update and open every app in the Craft App Suite, rebuilt in pure Rust.
PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft, PdfCraft, EffectCraft, WordCraft,
- DeckCraft, GridCraft, CADCraft and SoundCraft: the right build for your computer, kept up to date. + DeckCraft, GridCraft, CADCraft, SoundCraft and FigCraft: the right build for your computer, kept up to date.

@@ -247,6 +247,7 @@ stand on its own. | | **DeckCraft** | Presentations and slide decks | [GitHub](https://github.com/storytold/deckcraft) | [Website](https://getartcraft.com/apps/deckcraft) | | | **CADCraft** | Computer-aided design | [GitHub](https://github.com/storytold/cadcraft) | [Website](https://getartcraft.com/apps/cadcraft) | | | **SoundCraft** | Audio recording and editing | [GitHub](https://github.com/storytold/soundcraft) | [Website](https://getartcraft.com/apps/soundcraft) | +| | **FigCraft** | Interface design and prototyping | [GitHub](https://github.com/storytold/figcraft) | [Website](https://getartcraft.com/apps/figcraft) | And [**ArtCraft**](https://getartcraft.com/) itself, our AI image and video studio for artists who want real control. diff --git a/assets/app-icons/figcraft.png b/assets/app-icons/figcraft.png new file mode 100644 index 0000000..48be0b9 Binary files /dev/null and b/assets/app-icons/figcraft.png differ diff --git a/crates/core/src/catalog.rs b/crates/core/src/catalog.rs index d655a0b..d13444c 100644 --- a/crates/core/src/catalog.rs +++ b/crates/core/src/catalog.rs @@ -1,4 +1,4 @@ -//! The Craft App Suite: the twelve apps the launcher knows about. +//! The Craft App Suite: the thirteen apps the launcher knows about. //! //! The list is data so a later version can fetch it from an API; [`SUITE`] is the built-in copy. //! @@ -12,7 +12,7 @@ use serde::{Deserialize, Serialize}; pub enum AppGroup { /// The seven original apps. Classic, - /// The five apps added after them. + /// The six apps added after them. New, } @@ -94,8 +94,8 @@ const fn app( CraftApp { id, name, tagline, group, color, ink_light, ink_dark, repo, former_ids: &[], former_names: &[] } } -/// The Craft App Suite, in display order: the seven classic apps, then the five new ones. -pub const SUITE: [CraftApp; 12] = [ +/// The Craft App Suite, in display order: the seven classic apps, then the six new ones. +pub const SUITE: [CraftApp; 13] = [ app( "photocraft", "PhotoCraft", @@ -196,6 +196,14 @@ pub const SUITE: [CraftApp; 12] = [ [[0x1f, 0xa5, 0xc9], [0x0e, 0x72, 0x90], [0x5f, 0xd0, 0xee]], "storytold/soundcraft", ), + app( + "figcraft", + "FigCraft", + "Interface design and prototyping", + AppGroup::New, + [[0x02, 0xda, 0x96], [0x04, 0x7a, 0x56], [0x4f, 0xe8, 0xb6]], + "storytold/figcraft", + ), ]; /// ArtCraft's website. @@ -239,9 +247,9 @@ mod tests { use super::*; #[test] - fn suite_has_seven_classic_and_five_new_apps_with_unique_ids() { + fn suite_has_seven_classic_and_six_new_apps_with_unique_ids() { assert_eq!(SUITE.iter().filter(|a| a.group == AppGroup::Classic).count(), 7); - assert_eq!(SUITE.iter().filter(|a| a.group == AppGroup::New).count(), 5); + assert_eq!(SUITE.iter().filter(|a| a.group == AppGroup::New).count(), 6); let mut ids: Vec<_> = SUITE.iter().map(|a| a.id).collect(); ids.sort_unstable(); ids.dedup(); diff --git a/crates/core/src/details.rs b/crates/core/src/details.rs index 0b3ed72..4ffe83f 100644 --- a/crates/core/src/details.rs +++ b/crates/core/src/details.rs @@ -67,7 +67,7 @@ pub fn looks_like_jpeg(bytes: &[u8]) -> bool { /// Where every Craft App runs (getartcraft.com lists the same for each of them). const PLATFORMS: &str = "macOS, Windows, Linux, FreeBSD, web"; -pub const DETAILS: [AppDetails; 12] = [ +pub const DETAILS: [AppDetails; 13] = [ AppDetails { id: "photocraft", headline: "The image editor you already know how to use.", @@ -371,6 +371,37 @@ pub const DETAILS: [AppDetails; 12] = [ ], platforms: PLATFORMS, }, + AppDetails { + id: "figcraft", + headline: "Interface design and prototyping, in pure Rust.", + about: "Design screens, components and prototypes in a native app that opens instantly and works offline, \ + with no account and no telemetry. Early alpha.", + features: &[ + feature( + "Auto layout", + "Rows, columns, wrap and grids with padding, gaps and Hug, Fill or Fixed sizing, plus constraints and layout grids.", + ), + feature( + "Components", + "Instances with overrides, variants and properties, styles, and variables with modes bound to fills, strokes and effects.", + ), + feature("Vectors", "Real vector networks, the pen and pencil, the shape builder, editable booleans and variable width strokes."), + feature( + "Prototypes", + "Connections, triggers and animated transitions, variables with conditionals, flows and a presentation view with device frames.", + ), + feature( + "Hand off", + "Inspect mode with measurements, annotations, ready-for-dev status, and code for CSS, HTML, React, SwiftUI and Compose.", + ), + feature( + "Your files", + "Plain .figcraft files on your own disk. SVG, PNG, JPEG, WebP and PDF in and out, and .fig files open, best effort.", + ), + ], + shots: &[], + platforms: PLATFORMS, + }, ]; impl AppDetails { diff --git a/crates/core/src/platform.rs b/crates/core/src/platform.rs index 2c0137c..398b34d 100644 --- a/crates/core/src/platform.rs +++ b/crates/core/src/platform.rs @@ -263,6 +263,9 @@ mod tests { { assert_eq!(parse_asset_name(other, &["photocraft"]), None, "{other}"); } + // FigCraft also ships its collaboration server; that tarball is not the app. + assert_eq!(parse_asset_name("figcraft-server-0.5.1-linux-x86_64.tar.gz", &["figcraft"]), None); + assert!(parse_asset_name("figcraft-0.5.1-linux-x86_64.tar.gz", &["figcraft"]).is_some()); } #[test] diff --git a/crates/native/src/desktop_entry.rs b/crates/native/src/desktop_entry.rs index 09ed281..0a519f5 100644 --- a/crates/native/src/desktop_entry.rs +++ b/crates/native/src/desktop_entry.rs @@ -31,6 +31,7 @@ pub fn meta(app: &CraftApp) -> (&'static str, Option<&'static str>) { "gridcraft" => ("Office;Spreadsheet;", None), "cadcraft" => ("Graphics;Engineering;VectorGraphics;", None), "soundcraft" => ("AudioVideo;Audio;Midi;Mixer;Sequencer;Recorder;", None), + "figcraft" => ("Graphics;2DGraphics;VectorGraphics;X-Design;", Some("figcraft")), _ => ("Graphics;", None), } } diff --git a/crates/native/src/install.rs b/crates/native/src/install.rs index c6f77c6..b33c62a 100644 --- a/crates/native/src/install.rs +++ b/crates/native/src/install.rs @@ -746,6 +746,7 @@ pub(crate) mod linux { "gridcraft" => include_bytes!("../../../assets/app-icons/gridcraft.png"), "cadcraft" => include_bytes!("../../../assets/app-icons/cadcraft.png"), "soundcraft" => include_bytes!("../../../assets/app-icons/soundcraft.png"), + "figcraft" => include_bytes!("../../../assets/app-icons/figcraft.png"), _ => return None, }) } diff --git a/crates/ui-egui/src/i18n/cs.tsv b/crates/ui-egui/src/i18n/cs.tsv index e3022fc..9bfcba5 100644 --- a/crates/ui-egui/src/i18n/cs.tsv +++ b/crates/ui-egui/src/i18n/cs.tsv @@ -152,6 +152,7 @@ deckcraft Presentations and slide shows Prezentace a promítání snímků gridcraft Spreadsheets and data Tabulky a data cadcraft Computer-aided design and drafting Počítačem podporované navrhování a kreslení soundcraft Recording, editing and mixing audio Nahrávání, úpravy a mixování zvuku +figcraft Interface design and prototyping Návrh rozhraní a prototypování month Jan 1. month Feb 2. month Mar 3. diff --git a/crates/ui-egui/src/i18n/de.tsv b/crates/ui-egui/src/i18n/de.tsv index 8c2c2c6..3145467 100644 --- a/crates/ui-egui/src/i18n/de.tsv +++ b/crates/ui-egui/src/i18n/de.tsv @@ -14,7 +14,7 @@ # Left in English on purpose: product name "ArtCraft Launcher" (and its "Launcher" tag), suite # name "Craft App Suite", # app names (PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft, PdfCraft, EffectCraft, -# WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft), "GitHub", "Discord". +# WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft, FigCraft), "GitHub", "Discord". # Shortcut keys keep their key-cap names (Shift, Alt, Ctrl, Cmd, Esc). # Trailing "…" (U+2026) must be preserved. Placeholders {name}, {n}, {version}, {count}, {v}, # {what}, {unit}, {real}, {e} must appear in translation. @@ -170,6 +170,7 @@ deckcraft Presentations and slide shows Präsentationen und Diashows gridcraft Spreadsheets and data Tabellenkalkulation und Daten cadcraft Computer-aided design and drafting Computergestütztes Konstruieren und Zeichnen soundcraft Recording, editing and mixing audio Audio aufnehmen, bearbeiten und mischen +figcraft Interface design and prototyping Interface-Design und Prototyping # Contextual: month abbreviations for date rendering month Jan Jan. diff --git a/crates/ui-egui/src/i18n/es.tsv b/crates/ui-egui/src/i18n/es.tsv index 71bd155..f5a0163 100644 --- a/crates/ui-egui/src/i18n/es.tsv +++ b/crates/ui-egui/src/i18n/es.tsv @@ -14,7 +14,7 @@ # Left in English on purpose: product name "ArtCraft Launcher" (and its "Launcher" tag), suite # name "Craft App Suite", app names (PhotoCraft, LightCraft, FilmCraft, # DesignCraft, VectorCraft, PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, CADCraft, -# SoundCraft), "GitHub", "Discord", "Finder", "makers". +# SoundCraft, FigCraft), "GitHub", "Discord", "Finder", "makers". # Trailing "…" (U+2026) must be preserved. Placeholders must appear in the translation: # {ago}, {a}, {b}, {count}, {date}, {day}, {done}, {e}, {f}, {installed}, {latest}, {min}, # {month}, {name}, {n}, {os}, {platform}, {sources}, {total}, {version}, {v}, {year}. @@ -165,6 +165,7 @@ deckcraft Presentations and slide shows Presentaciones y diapositivas gridcraft Spreadsheets and data Hojas de cálculo y datos cadcraft Computer-aided design and drafting CAD: diseño y dibujo técnico soundcraft Recording, editing and mixing audio Grabación, edición y mezcla de audio +figcraft Interface design and prototyping Diseño de interfaces y prototipos month Jan ene. month Feb feb. month Mar mar. diff --git a/crates/ui-egui/src/i18n/fr.tsv b/crates/ui-egui/src/i18n/fr.tsv index f0c97c8..2d89a4c 100644 --- a/crates/ui-egui/src/i18n/fr.tsv +++ b/crates/ui-egui/src/i18n/fr.tsv @@ -12,7 +12,7 @@ # Coverage: the whole interface: every menu string and tl! literal (complete_menus = true). # Left in English on purpose: product name "ArtCraft Launcher" (and its "Launcher" tag), suite # name "Craft App Suite", app names (PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft, -# PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft), "GitHub", +# PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft, FigCraft), "GitHub", # "Discord". # Trailing "…" (U+2026) must be preserved. Placeholders {name}, {n}, {version}, {count}, {v}, # {what}, {unit}, {real}, {e} must appear in translation. @@ -168,6 +168,7 @@ deckcraft Presentations and slide shows Présentations et diaporamas gridcraft Spreadsheets and data Tableurs et données cadcraft Computer-aided design and drafting Conception et dessin assistés par ordinateur soundcraft Recording, editing and mixing audio Enregistrement, édition et mixage audio +figcraft Interface design and prototyping Design d'interfaces et prototypage # Contextual: month abbreviations for date rendering month Jan janv. diff --git a/crates/ui-egui/src/i18n/hu.tsv b/crates/ui-egui/src/i18n/hu.tsv index 8b15ccf..8915ab7 100644 --- a/crates/ui-egui/src/i18n/hu.tsv +++ b/crates/ui-egui/src/i18n/hu.tsv @@ -14,7 +14,7 @@ # Left in English on purpose: product name "ArtCraft Launcher" (and its "Launcher" tag), suite # name "Craft App Suite", # app names (PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft, PdfCraft, EffectCraft, -# WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft), "GitHub", "Discord". +# WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft, FigCraft), "GitHub", "Discord". # Shortcut keys keep their key-cap names (Shift, Alt, Ctrl, Cmd, Esc). # Trailing "…" (U+2026) must be preserved. Placeholders {name}, {n}, {version}, {count}, {v}, # {what}, {unit}, {real}, {e} must appear in translation. @@ -170,6 +170,7 @@ deckcraft Presentations and slide shows Prezentációk és diavetítések gridcraft Spreadsheets and data Táblázatok és adatok cadcraft Computer-aided design and drafting Számítógépes tervezés és műszaki rajz soundcraft Recording, editing and mixing audio Hangrögzítés, hangszerkesztés és keverés +figcraft Interface design and prototyping Felülettervezés és prototípus-készítés # Contextual: month abbreviations for date rendering month Jan jan. diff --git a/crates/ui-egui/src/i18n/ja.tsv b/crates/ui-egui/src/i18n/ja.tsv index 9dd69df..1548831 100644 --- a/crates/ui-egui/src/i18n/ja.tsv +++ b/crates/ui-egui/src/i18n/ja.tsv @@ -14,7 +14,7 @@ # Left in English on purpose: product name "ArtCraft Launcher" (and its "Launcher" tag), suite # name "Craft App Suite", # app names (PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft, PdfCraft, EffectCraft, -# WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft), "GitHub", "Discord". +# WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft, FigCraft), "GitHub", "Discord". # Shortcut keys keep their key-cap names (Shift, Alt, Ctrl, Cmd, Esc). # Trailing "…" (U+2026) must be preserved. Placeholders {name}, {n}, {version}, {count}, {v}, # {what}, {unit}, {real}, {e} must appear in translation. @@ -172,6 +172,7 @@ deckcraft Presentations and slide shows プレゼンテーションとスライ gridcraft Spreadsheets and data 表計算とデータ cadcraft Computer-aided design and drafting コンピューター支援設計と製図 soundcraft Recording, editing and mixing audio オーディオの録音、編集、ミックス +figcraft Interface design and prototyping インターフェースデザインとプロトタイピング # Contextual: month abbreviations for date rendering month Jan 1月 diff --git a/crates/ui-egui/src/i18n/pl.tsv b/crates/ui-egui/src/i18n/pl.tsv index ce0ffb5..f4ee0f7 100644 --- a/crates/ui-egui/src/i18n/pl.tsv +++ b/crates/ui-egui/src/i18n/pl.tsv @@ -13,7 +13,7 @@ # Coverage: the whole interface — every menu string and tl! literal (complete_menus = true). # Left in English on purpose: product name "ArtCraft Launcher" (and its "Launcher" tag), suite # name "Craft App Suite", app names (PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft, -# PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft), "GitHub", +# PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft, FigCraft), "GitHub", # "Discord". # Shortcut keys keep their key-cap names (Shift, Alt, Ctrl, Cmd, Esc). # Trailing "…" (U+2026) must be preserved. Placeholders {name}, {n}, {version}, {count}, {v}, @@ -171,6 +171,7 @@ deckcraft Presentations and slide shows Prezentacje i pokazy slajdów gridcraft Spreadsheets and data Arkusze kalkulacyjne i dane cadcraft Computer-aided design and drafting Projektowanie i kreślenie wspomagane komputerowo soundcraft Recording, editing and mixing audio Nagrywanie, edycja i miksowanie dźwięku +figcraft Interface design and prototyping Projektowanie interfejsów i prototypowanie # Contextual: month abbreviations for date rendering month Jan sty diff --git a/crates/ui-egui/src/i18n/pt-BR.tsv b/crates/ui-egui/src/i18n/pt-BR.tsv index eedbcf3..4719861 100644 --- a/crates/ui-egui/src/i18n/pt-BR.tsv +++ b/crates/ui-egui/src/i18n/pt-BR.tsv @@ -158,6 +158,7 @@ deckcraft Presentations and slide shows Apresentações e slides gridcraft Spreadsheets and data Planilhas e dados cadcraft Computer-aided design and drafting Desenho técnico e projeto assistido por computador (CAD) soundcraft Recording, editing and mixing audio Gravação, edição e mixagem de áudio +figcraft Interface design and prototyping Design de interfaces e prototipagem # Contextual: month abbreviations for date rendering month Jan jan. diff --git a/crates/ui-egui/src/i18n/ru.tsv b/crates/ui-egui/src/i18n/ru.tsv index fcd8b67..8179d1d 100644 --- a/crates/ui-egui/src/i18n/ru.tsv +++ b/crates/ui-egui/src/i18n/ru.tsv @@ -13,7 +13,7 @@ # Left in English on purpose: product name "ArtCraft Launcher" (and its "Launcher" tag), suite # name "Craft App Suite", # app names (PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft, PdfCraft, EffectCraft, -# WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft), "GitHub", "Discord", "Website". +# WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft, FigCraft), "GitHub", "Discord", "Website". # Shortcut keys keep their key-cap names (Shift, Alt, Ctrl, Cmd, Esc). # Trailing "…" (U+2026) must be preserved. Placeholders {name}, {n}, {version}, {count}, {v}, # {what}, {unit}, {real}, {e} must appear in translation. @@ -168,6 +168,7 @@ deckcraft Presentations and slide shows Презентации и слайд-ш gridcraft Spreadsheets and data Электронные таблицы и данные cadcraft Computer-aided design and drafting Автоматизированное проектирование и черчение soundcraft Recording, editing and mixing audio Запись, редактирование и сведение звука +figcraft Interface design and prototyping Дизайн интерфейсов и прототипирование # Contextual: month abbreviations for date rendering month Jan янв. diff --git a/crates/ui-egui/src/i18n/zh-CN.tsv b/crates/ui-egui/src/i18n/zh-CN.tsv index fb3df06..bdc9e12 100644 --- a/crates/ui-egui/src/i18n/zh-CN.tsv +++ b/crates/ui-egui/src/i18n/zh-CN.tsv @@ -247,6 +247,7 @@ deckcraft Presentations and slide shows 演示文稿与幻灯片 gridcraft Spreadsheets and data 电子表格与数据处理 cadcraft Computer-aided design and drafting 计算机辅助设计与制图 soundcraft Recording, editing and mixing audio 音频录制、编辑与混音 +figcraft Interface design and prototyping 界面设计与原型制作 Show in Files 在文件管理器中显示 Loading ArtCraft Launcher… 正在加载 ArtCraft Launcher… diff --git a/crates/ui-egui/src/icons.rs b/crates/ui-egui/src/icons.rs index 8ad51b1..eb79df5 100644 --- a/crates/ui-egui/src/icons.rs +++ b/crates/ui-egui/src/icons.rs @@ -17,6 +17,7 @@ pub fn app(id: &str) -> Option> { "gridcraft" => egui::include_image!("../../../assets/app-icons/gridcraft.png"), "cadcraft" => egui::include_image!("../../../assets/app-icons/cadcraft.png"), "soundcraft" => egui::include_image!("../../../assets/app-icons/soundcraft.png"), + "figcraft" => egui::include_image!("../../../assets/app-icons/figcraft.png"), _ => return None, }) } diff --git a/crates/ui-egui/tests/ui.rs b/crates/ui-egui/tests/ui.rs index 211beb2..a89a4aa 100644 --- a/crates/ui-egui/tests/ui.rs +++ b/crates/ui-egui/tests/ui.rs @@ -631,8 +631,8 @@ fn links_to_the_website_github_and_each_apps_pages() { // Cards: every app links to its repo and to its own page on getartcraft.com (plus the footer's). let shown_cards = h.query_all_by_label("GitHub").count() - 1; let shown_sites = h.query_all_by_label("Website").count() - 1; - assert!(shown_cards >= 12, "{shown_cards}"); - assert_eq!(shown_sites, 12, "every app has a website page"); + assert!(shown_cards >= 13, "{shown_cards}"); + assert_eq!(shown_sites, 13, "every app has a website page"); // The table's … menu has the app's website and GitHub repo. let (mut h, _) = harness(ViewMode::Table, egui::Theme::Dark, true); h.run_steps(6); @@ -1206,7 +1206,7 @@ fn the_lead_picture_can_be_enlarged() { #[test] fn every_page_opens_and_pages_through_its_pictures() { let (mut h, _sent) = harness(ViewMode::Grid, egui::Theme::Dark, true); - // Tall enough to show all twelve cards at once. + // Tall enough to show all thirteen cards at once. h.set_size(egui::vec2(1180.0, 3000.0)); h.run_steps(8); for d in &artcraft_launcher_core::details::DETAILS { diff --git a/packaging/linux/ai.storyteller.artcraft-launcher.metainfo.xml.in b/packaging/linux/ai.storyteller.artcraft-launcher.metainfo.xml.in index 234acb6..7a885ff 100644 --- a/packaging/linux/ai.storyteller.artcraft-launcher.metainfo.xml.in +++ b/packaging/linux/ai.storyteller.artcraft-launcher.metainfo.xml.in @@ -13,8 +13,8 @@

ArtCraft Launcher lists every app in the Craft App Suite (PhotoCraft, LightCraft, FilmCraft, - DesignCraft, VectorCraft, PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, CADCraft - and SoundCraft), installs the right build for your computer, and keeps them up to date. + DesignCraft, VectorCraft, PdfCraft, EffectCraft, WordCraft, DeckCraft, GridCraft, CADCraft, + SoundCraft and FigCraft), installs the right build for your computer, and keeps them up to date.