4 Commits

Author SHA1 Message Date
Marcos Paulo 7df4d2b81c chore: release 0.6.2
FreeBSD / freebsd (push) Has been cancelled
Windows ARM64 / windows-arm64 (push) Has been cancelled
Release / release (push) Has been cancelled
2026-10-12 21:41:48 -03:00
Marcos Paulo 7d35f33ff1 build: refresh Cargo.lock for the masi/craft-libs fork rev 2026-10-12 21:08:22 -03:00
Marcos Paulo c19422ffbb feat(ui): Catppuccin themes
Add Latte, Frappé, Macchiato and Mocha to the interface theme setting, using the
masi/craft-libs fork (craft-ui). Shown in File > Options and View > Interface Theme.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 20:56:02 -03:00
Marcos Paulo 2536471d11 chore: debrand ArtCraft and Discord references
Remove the Discord button, Help/backstage links and brand assets; rewrite docs,
packaging URLs and catalogs. Add .debrand rules and the craft-skills submodule
(debrand skill) to keep upstream syncs clean.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 20:55:51 -03:00
55 changed files with 1622 additions and 390 deletions
+13
View File
@@ -0,0 +1,13 @@
# Strip upstream (ArtCraft / Discord) branding. Run: perl tools/craft-skills/skills/debrand/debrand.pl . (--check in CI)
delete docs/brand
# MIT/Apache texts stay verbatim. The copyright holder line stays everywhere (legal requirement).
keep ^(LICENSE-(MIT|APACHE)|\.debrand)$
dropline ^crates/ui-egui/src/i18n/.*\.tsv$ :: (?i)\t(?!MIT OR Apache).*(?:ArtCraft|Discord)
dropline ^ATTRIBUTION\.md$ :: \|\s*`docs/brand/
dropline ^assets/spelling/en-extra\.txt$ :: artcraft
sub \s*The one exception is the ArtCraft brand files in `docs/brand/`: ArtCraft trademarks, not open source, used under `docs/brand/LICENSE-brand\.txt`\. =>
sub (?s)\nThe ArtCraft name, wordmark and logos in docs/brand/.*?LICENSE-brand\.txt\.\n =>
sub https://getartcraft\.com/apps/wordcraft => https://github.com/storytold/wordcraft
forbid (?im)^(?!\tMIT OR Apache-2\.0)(?!.*Copyright \(c\) 2026 ArtCraft Team).*artcraft
forbid (?i)discord
sub the Discord pill, =>
+3
View File
@@ -0,0 +1,3 @@
[submodule "tools/craft-skills"]
path = tools/craft-skills
url = https://git.marcospaulo.dev.br/storytold/craft-skills.git
+1 -10
View File
@@ -2,7 +2,7 @@
Every non-code asset in this repository (fonts, icons, images, example documents) is listed here with its author, source and licence. `cargo xtask assets` (part of `cargo xtask ci`) fails if an asset file is missing from this table.
**Policy (mandatory):** WordCraft contains **no Microsoft, Adobe, Avid or Autodesk iconography, images, templates, themes, clip art, fonts or other assets**. Every asset is original work by WordCraft contributors or third-party material under an open licence (OSI open source, public domain / CC0, or a Creative Commons licence that allows redistribution). Screenshots of other vendors' software are never committed. New font files go to [storytold/craft-fonts](https://github.com/storytold/craft-fonts), not this repo. The one exception is the ArtCraft brand files in `docs/brand/`: ArtCraft trademarks, not open source, used under `docs/brand/LICENSE-brand.txt`.
**Policy (mandatory):** WordCraft contains **no Microsoft, Adobe, Avid or Autodesk iconography, images, templates, themes, clip art, fonts or other assets**. Every asset is original work by WordCraft contributors or third-party material under an open licence (OSI open source, public domain / CC0, or a Creative Commons licence that allows redistribution). Screenshots of other vendors' software are never committed. New font files go to [storytold/craft-fonts](https://github.com/storytold/craft-fonts), not this repo.
Generated-in-code art is original and has no file to list: the UI icon set (`crates/ui-egui/src/icons.rs`), the sample documents and templates (`crates/engine/src/sample.rs`), the table and style previews, and theme colours (`crates/engine/src/cmd/design.rs`).
@@ -53,15 +53,6 @@ Generated-in-code art is original and has no file to list: the UI icon set (`cra
| `docs/images/dark.png` | WordCraft contributors | screenshot of WordCraft itself (sample document written for WordCraft, rendered by `ui_shot`) | MIT OR Apache-2.0 | Original; no Microsoft UI or assets |
| `docs/images/backstage.png` | WordCraft contributors | screenshot of WordCraft itself (sample document written for WordCraft, rendered by `ui_shot`) | MIT OR Apache-2.0 | Original; no Microsoft UI or assets |
| `docs/images/layout.png` | WordCraft contributors | screenshot of WordCraft itself (sample document written for WordCraft, rendered by `ui_shot`) | MIT OR Apache-2.0 | Original; no Microsoft UI or assets |
| `docs/brand/LICENSE-brand.txt` | ArtCraft Team | craftrules `assets/brand/` | ArtCraft trademark, `docs/brand/LICENSE-brand.txt` | Not open source; usable unmodified only |
| `docs/brand/artcraft-logo-white.png` | ArtCraft Team | craftrules `assets/brand/` | ArtCraft trademark, `docs/brand/LICENSE-brand.txt` | Not open source; usable unmodified only |
| `docs/brand/artcraft-logo-white.svg` | ArtCraft Team | craftrules `assets/brand/` | ArtCraft trademark, `docs/brand/LICENSE-brand.txt` | Not open source; usable unmodified only |
| `docs/brand/artcraft-logo.png` | ArtCraft Team | craftrules `assets/brand/` | ArtCraft trademark, `docs/brand/LICENSE-brand.txt` | Not open source; usable unmodified only |
| `docs/brand/artcraft-logo.svg` | ArtCraft Team | craftrules `assets/brand/` | ArtCraft trademark, `docs/brand/LICENSE-brand.txt` | Not open source; usable unmodified only |
| `docs/brand/artcraft-mark-black.png` | ArtCraft Team | craftrules `assets/brand/` | ArtCraft trademark, `docs/brand/LICENSE-brand.txt` | Not open source; usable unmodified only |
| `docs/brand/artcraft-mark-black.svg` | ArtCraft Team | craftrules `assets/brand/` | ArtCraft trademark, `docs/brand/LICENSE-brand.txt` | Not open source; usable unmodified only |
| `docs/brand/artcraft-mark.png` | ArtCraft Team | craftrules `assets/brand/` | ArtCraft trademark, `docs/brand/LICENSE-brand.txt` | Not open source; usable unmodified only |
| `docs/brand/artcraft-mark.svg` | ArtCraft Team | craftrules `assets/brand/` | ArtCraft trademark, `docs/brand/LICENSE-brand.txt` | Not open source; usable unmodified only |
| craft-fonts (optional build input, not files in this repo): BIZ UDPGothic, BIZ UDMincho, Shippori Mincho, Noto Sans CJK SC, Noto Sans Arabic | see https://github.com/storytold/craft-fonts/blob/main/ATTRIBUTION.md | embedded only when built with `CRAFT_FONTS_DIR` (all official releases) | OFL-1.1 | Japanese and Chinese UI, Japanese document fallback |
| `crates/ui-egui/src/i18n/uk.tsv` | @dmatviichuk with Codex | Original translation from the English interface labels in this repository; no other product localisation copied | MIT OR Apache-2.0 | Ukrainian interface catalog; spelling checked with external VESUM and ULIF dictionaries, neither bundled |
| `crates/ui-egui/src/i18n/et.tsv` | @henno with Codex | Original translation from the English interface labels in this repository; no other product localisation copied | MIT OR Apache-2.0 | Estonian interface catalog |
Generated
+1399 -48
View File
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -4,13 +4,14 @@ members = ["crates/*", "apps/*", "xtask"]
default-members = ["crates/*", "apps/wordcraft", "apps/wordcraft-cli", "xtask"]
[workspace.package]
version = "0.6.1"
version = "0.6.2"
edition = "2024"
license = "MIT OR Apache-2.0"
rust-version = "1.90"
repository = "https://github.com/storytold/wordcraft"
[workspace.dependencies]
craft-ui = { git = "https://git.marcospaulo.dev.br/masi/craft-libs", rev = "7fcee66b8eef8eac3c7644fd024e1f1b051f5a3e", features = ["serde"] }
# internal
wordcraft-geom = { path = "crates/geom" }
wordcraft-doc = { path = "crates/doc" }
-4
View File
@@ -3,10 +3,6 @@ Copyright (c) 2026 ArtCraft Team and the WordCraft contributors.
Licensed under the MIT License or the Apache License, Version 2.0, at your option
(LICENSE-MIT, LICENSE-APACHE).
The ArtCraft name, wordmark and logos in docs/brand/ are trademarks of the ArtCraft Team. They are
not open source and are not covered by the license above; their terms are in
docs/brand/LICENSE-brand.txt.
Third-party material
This product bundles third-party material under its own licenses, listed below. The per-file
+12 -69
View File
@@ -1,12 +1,3 @@
<p align="center">
<a href="https://getartcraft.com/">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="docs/brand/artcraft-logo-white.svg">
<img alt="ArtCraft" src="docs/brand/artcraft-logo.svg" width="200">
</picture>
</a>
</p>
<h1 align="center">WordCraft</h1>
<p align="center">
@@ -16,8 +7,7 @@
<p align="center">
A fast, open-source word processor with the Word workflow you already know: the ribbon, styles,
tables, track changes, references and mail merge. It reads and writes .docx, runs natively on
macOS, Windows, Linux and BSD, and in the browser via WebAssembly.<br>
<i>By the ArtCraft team.</i>
macOS, Windows, Linux and BSD, and in the browser via WebAssembly.
</p>
<p align="center">
@@ -27,16 +17,6 @@
<img alt="Agent-drivable over MCP" src="https://img.shields.io/badge/agents-MCP%20%C2%B7%20CLI-3b5bdb?style=flat-square">
</p>
<p align="center">
<a href="https://discord.gg/artcraft"><img alt="Join the ArtCraft community on Discord" src="https://img.shields.io/badge/Join%20us%20on%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" height="40"></a>
</p>
<p align="center">
<a href="https://getartcraft.com/apps/wordcraft"><b>WordCraft on getartcraft.com</b></a> ·
<a href="https://getartcraft.com/">ArtCraft</a> ·
<a href="https://getartcraft.com/apps">All Crafting Apps</a>
</p>
<br>
<p align="center">
@@ -44,11 +24,6 @@
<br><sub><b>The Open Studio Handbook</b>, WordCraft's built-in sample: the ribbon, live Styles gallery, rulers and the Navigation pane.</sub>
</p>
> [!NOTE]
> **ArtCraft is a community of artists from all walks of life.** Painters, photographers,
> filmmakers, illustrators, designers, animators, hobbyists, and people who picked up a pencil
> last week. If you make things, you're one of us. **[Come say hi on Discord](https://discord.gg/artcraft).**
<p align="center">
<a href="#a-tour">A tour</a> ·
<a href="#why-wordcraft">Why WordCraft</a> ·
@@ -304,44 +279,22 @@ For example `yay -S wordcraft-bin` or `paru -S wordcraft-bin`.
## The Crafting Apps
WordCraft is one of the **Crafting Apps**: free, open-source creative tools from the
[ArtCraft](https://getartcraft.com/) team, each written from scratch in Rust and each able to
[storytold](https://github.com/storytold) team, each written from scratch in Rust and each able to
stand on its own.
| | App | What it's for | Code | Learn more |
|:-:|---|---|---|---|
| <img src="https://raw.githubusercontent.com/storytold/photocraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.photocraft.png" alt="" width="32" height="32"> | **PhotoCraft** | Image editing: layers, masks, type and real PSD files | [GitHub](https://github.com/storytold/photocraft) | [Website](https://getartcraft.com/apps/photocraft) |
| <img src="https://raw.githubusercontent.com/storytold/vectorcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.vectorcraft.png" alt="" width="32" height="32"> | **VectorCraft** | Vector illustration | [GitHub](https://github.com/storytold/vectorcraft) | [Website](https://getartcraft.com/apps/vectorcraft) |
| <img src="https://raw.githubusercontent.com/storytold/filmcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.filmcraft.png" alt="" width="32" height="32"> | **FilmCraft** | Video editing, color and sound | [GitHub](https://github.com/storytold/filmcraft) | [Website](https://getartcraft.com/apps/filmcraft) |
| <img src="https://raw.githubusercontent.com/storytold/lightcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.lightcraft.png" alt="" width="32" height="32"> | **LightCraft** | Photo library and raw development | [GitHub](https://github.com/storytold/lightcraft) | [Website](https://getartcraft.com/apps/lightcraft) |
| <img src="https://raw.githubusercontent.com/storytold/pdfcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.pdfcraft.png" alt="" width="32" height="32"> | **PdfCraft** | Reading, organizing and protecting PDFs | [GitHub](https://github.com/storytold/pdfcraft) | [Website](https://getartcraft.com/apps/pdfcraft) |
| <img src="https://raw.githubusercontent.com/storytold/effectcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.effectcraft.png" alt="" width="32" height="32"> | **EffectCraft** | Motion graphics and visual effects | [GitHub](https://github.com/storytold/effectcraft) | [Website](https://getartcraft.com/apps/effectcraft) |
| <img src="https://raw.githubusercontent.com/storytold/designcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.designcraft.png" alt="" width="32" height="32"> | **DesignCraft** | Page layout and publishing | [GitHub](https://github.com/storytold/designcraft) | [Website](https://getartcraft.com/apps/designcraft) |
| <img src="https://raw.githubusercontent.com/storytold/wordcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.wordcraft.png" alt="" width="32" height="32"> | **WordCraft** | **Writing and document design · you are here** | [GitHub](https://github.com/storytold/wordcraft) | [Website](https://getartcraft.com/apps/wordcraft) |
And [**ArtCraft**](https://getartcraft.com/) itself, our AI image and video studio for artists who want real control.
| | App | What it's for | Code |
|:-:|---|---|---|
| <img src="https://raw.githubusercontent.com/storytold/photocraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.photocraft.png" alt="" width="32" height="32"> | **PhotoCraft** | Image editing: layers, masks, type and real PSD files | [GitHub](https://github.com/storytold/photocraft) |
| <img src="https://raw.githubusercontent.com/storytold/vectorcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.vectorcraft.png" alt="" width="32" height="32"> | **VectorCraft** | Vector illustration | [GitHub](https://github.com/storytold/vectorcraft) |
| <img src="https://raw.githubusercontent.com/storytold/filmcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.filmcraft.png" alt="" width="32" height="32"> | **FilmCraft** | Video editing, color and sound | [GitHub](https://github.com/storytold/filmcraft) |
| <img src="https://raw.githubusercontent.com/storytold/lightcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.lightcraft.png" alt="" width="32" height="32"> | **LightCraft** | Photo library and raw development | [GitHub](https://github.com/storytold/lightcraft) |
| <img src="https://raw.githubusercontent.com/storytold/pdfcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.pdfcraft.png" alt="" width="32" height="32"> | **PdfCraft** | Reading, organizing and protecting PDFs | [GitHub](https://github.com/storytold/pdfcraft) |
| <img src="https://raw.githubusercontent.com/storytold/effectcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.effectcraft.png" alt="" width="32" height="32"> | **EffectCraft** | Motion graphics and visual effects | [GitHub](https://github.com/storytold/effectcraft) |
| <img src="https://raw.githubusercontent.com/storytold/designcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.designcraft.png" alt="" width="32" height="32"> | **DesignCraft** | Page layout and publishing | [GitHub](https://github.com/storytold/designcraft) |
| <img src="https://raw.githubusercontent.com/storytold/wordcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.wordcraft.png" alt="" width="32" height="32"> | **WordCraft** | **Writing and document design · you are here** | [GitHub](https://github.com/storytold/wordcraft) |
<br>
<p align="center">
<a href="https://discord.gg/artcraft"><img alt="Join the ArtCraft community on Discord" src="https://img.shields.io/badge/Join%20us%20on%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" height="40"></a>
</p>
<h3 align="center">Come make things with us</h3>
<p align="center">
Our Discord is where artists of every kind hang out: people who paint, shoot, draw, cut film,
set type, and people still figuring out what they like to make. Share what you're working on,
ask for help, tell us what's broken, or tell us what you wish these tools could do.
Whatever your medium and however long you've been at it, you're welcome here.
</p>
<p align="center">
<a href="https://discord.gg/artcraft"><b>discord.gg/artcraft</b></a> ·
<a href="https://getartcraft.com/">getartcraft.com</a> ·
<a href="https://getartcraft.com/apps">The Crafting Apps</a> ·
<a href="https://getartcraft.com/apps/wordcraft">WordCraft</a>
</p>
## License and credits
WordCraft is dual-licensed under [MIT](LICENSE-MIT) or [Apache-2.0](LICENSE-APACHE), at your option.
@@ -355,14 +308,4 @@ Hyphenator II word list. Polish spelling reads the Hunspell `pl_PL` dictionary i
Polish hyphenation the TeX patterns by Hanna Kołodziejska, Bogusław Jackowski and Marek Ryćko (MIT
option). The sample documents and templates are original text written for WordCraft.
The ArtCraft name, wordmark and logos in [`docs/brand/`](docs/brand/) are trademarks of the
ArtCraft Team and are not covered by this license. They may be used only unmodified, and only as
part of this repository and WordCraft, under [`docs/brand/LICENSE-brand.txt`](docs/brand/LICENSE-brand.txt).
Forks and modified versions must remove them.
<sub>Microsoft and Microsoft Word are trademarks of the Microsoft group of companies. Adobe, Photoshop, Illustrator, Premiere Pro, Lightroom, Acrobat, After Effects and InDesign are trademarks or registered trademarks of Adobe Inc. in the United States and/or other countries. WordCraft is an independent, open-source project and is not affiliated with, sponsored by or endorsed by Microsoft Corporation or Adobe Inc.; these names are used only to describe the workflows it is compatible with.</sub>
<p align="center">
<a href="https://getartcraft.com/"><img alt="ArtCraft" src="docs/brand/artcraft-mark.svg" width="28"></a><br>
<sub>Made by the <a href="https://getartcraft.com/">ArtCraft</a> team and community.</sub>
</p>
+1 -1
View File
@@ -67,7 +67,7 @@ windows = { version = "0.62", features = ["UI_ViewManagement", "System_UserProfi
clipboard-win = { version = "5.4", features = ["std"] }
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
craft-print = { git = "https://github.com/storytold/craft-libs", rev = "d27646a5f7c8b4fc85d9dd3213b8c88b58e0088d" }
craft-print = { git = "https://git.marcospaulo.dev.br/masi/craft-libs", rev = "7fcee66b8eef8eac3c7644fd024e1f1b051f5a3e" }
rfd = { workspace = true }
# Waits for an `rfd::AsyncFileDialog` on a background thread (the dialogs don't block the UI, #94);
# rfd itself already depends on it.
-1
View File
@@ -4,7 +4,6 @@
# inflection rules in crates/proof/src/lib.rs, so list "desktop", not "desktops".
airbag
airfare
artcraft
autocomplete
autocorrect
autofill
+1 -1
View File
@@ -112,7 +112,7 @@ pub fn sample_document() -> Document {
add(
&mut h,
"Visit the community board",
CharProps { style: Some("Hyperlink".into()), link: Some("https://getartcraft.com/".into()), ..Default::default() },
CharProps { style: Some("Hyperlink".into()), link: Some("https://github.com/storytold/wordcraft".into()), ..Default::default() },
);
add(&mut h, " for events.", CharProps::default());
b.push(Block::Para(h));
+1 -1
View File
@@ -52,7 +52,7 @@ pub fn export(doc: &Document) -> String {
let meta = &flow.meta;
let mut o = String::new();
o.push_str("% Written by WordCraft (https://getartcraft.com/apps/wordcraft).\n");
o.push_str("% Written by WordCraft (https://github.com/storytold/wordcraft).\n");
o.push_str("\\documentclass{article}\n");
o.push_str("\\usepackage[T1]{fontenc}\n");
if w.uses.ulem {
+2 -2
View File
@@ -133,9 +133,9 @@ impl Server {
Ok(json!({
"protocolVersion": version,
"capabilities": {"tools": {}, "resources": {}},
"serverInfo": {"name": "wordcraft", "title": "WordCraft", "version": env!("CARGO_PKG_VERSION"), "websiteUrl": "https://getartcraft.com/apps/wordcraft"},
"serverInfo": {"name": "wordcraft", "title": "WordCraft", "version": env!("CARGO_PKG_VERSION"), "websiteUrl": "https://github.com/storytold/wordcraft"},
"instructions": format!(
"{INSTRUCTIONS} Backend: {}. Community: https://discord.gg/artcraft · https://getartcraft.com/apps/wordcraft · https://github.com/storytold/wordcraft",
"{INSTRUCTIONS} Backend: {}. Source: https://github.com/storytold/wordcraft",
self.backend.describe()
),
}))
+1 -1
View File
@@ -9,7 +9,6 @@ description = "WordCraft egui front end (Word-style ribbon UI); swappable: nothi
workspace = true
[dependencies]
craft-ui = { git = "https://github.com/storytold/craft-libs", rev = "d27646a5f7c8b4fc85d9dd3213b8c88b58e0088d" }
wordcraft-geom = { workspace = true }
wordcraft-doc = { workspace = true }
wordcraft-fonts = { workspace = true }
@@ -17,6 +16,7 @@ wordcraft-layout = { workspace = true }
wordcraft-render = { workspace = true }
wordcraft-engine = { workspace = true }
wordcraft-zotero = { workspace = true }
craft-ui = { workspace = true }
egui = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
+5 -9
View File
@@ -59,7 +59,7 @@ pub fn show(app: &mut WordApp, ui: &mut Ui) {
ui.add_space(if mac { 12.0 } else { 6.0 });
for (id, label) in PAGES {
let (r, resp) = ui.allocate_exact_size(vec2(200.0, 38.0), Sense::click());
resp.widget_info(|| egui::WidgetInfo::labeled(egui::WidgetType::Button, ui.is_enabled(), tl!(label)));
resp.widget_info(|| egui::WidgetInfo::labeled(egui::WidgetType::Button, ui.is_enabled(), tl!("About")));
let active = app.ui.backstage_page == id;
if active {
ui.painter().rect_filled(r, 0.0, egui::Color32::from_white_alpha(46));
@@ -98,19 +98,15 @@ pub fn show(app: &mut WordApp, ui: &mut Ui) {
}
}
ui.with_layout(egui::Layout::bottom_up(egui::Align::Min), |ui| {
for (label, id) in [("About", "about"), ("Discord community", "discord")] {
{
let (r, resp) = ui.allocate_exact_size(vec2(200.0, 32.0), Sense::click());
resp.widget_info(|| egui::WidgetInfo::labeled(egui::WidgetType::Button, ui.is_enabled(), tl!(label)));
resp.widget_info(|| egui::WidgetInfo::labeled(egui::WidgetType::Button, ui.is_enabled(), tl!("About")));
if resp.hovered() {
ui.painter().rect_filled(r, 0.0, egui::Color32::from_white_alpha(26));
}
ui.painter().text(pos2(r.min.x + 22.0, r.center().y), Align2::LEFT_CENTER, tl!(label), regular(13.0), egui::Color32::WHITE);
ui.painter().text(pos2(r.min.x + 22.0, r.center().y), Align2::LEFT_CENTER, tl!("About"), regular(13.0), egui::Color32::WHITE);
if resp.clicked() {
if id == "discord" {
let _ = app.run("ui.discord", json!({}));
} else {
app.dialog = crate::dialogs::Dialog::open("about", app);
}
app.dialog = crate::dialogs::Dialog::open("about", app);
}
}
});
+2 -18
View File
@@ -4,7 +4,7 @@ use egui::{Align2, Rect, Sense, Stroke, Ui, pos2, vec2};
use serde_json::json;
use wordcraft_doc::StoryRef;
use crate::theme::{Tokens, TypeRung, medium, paint_text, regular, semibold, text_width};
use crate::theme::{Tokens, TypeRung, paint_text, regular, semibold, text_width};
use crate::{WordApp, icons};
fn qat_button(ui: &mut Ui, app: &mut WordApp, icon: &str, tip: &str, id: &str, enabled: bool) -> egui::Response {
@@ -256,29 +256,13 @@ pub fn title_bar(app: &mut WordApp, ui: &mut Ui) {
quick_access(ui, app);
qat_end = ui.min_rect().max.x;
ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
// Account / community.
// Account.
let (r, resp) = ui.allocate_exact_size(vec2(control_h, control_h), Sense::click());
ui.painter().circle_filled(r.center(), control_h / 2.0 - 1.0, t.accent);
let initials: String = app.session.user_initials().chars().take(2).collect();
ui.painter().text(r.center(), Align2::CENTER_CENTER, initials, semibold(10.5), t.on_accent);
resp.on_hover_text(format!("{} — set your name in File › Options", app.session.author));
ui.add_space(8.0);
if app.ui.show_discord {
let (r, resp) = ui.allocate_exact_size(vec2(84.0, 22.0), Sense::click());
ui.painter().rect_filled(r, 11.0, if resp.hovered() { t.accent_text } else { t.accent });
icons::paint(
ui.painter(),
Rect::from_center_size(pos2(r.min.x + 13.0, r.center().y), vec2(14.0, 14.0)),
"discord",
t.on_accent,
t.on_accent,
);
ui.painter().text(pos2(r.min.x + 24.0, r.center().y), Align2::LEFT_CENTER, tl!("Discord"), medium(11.5), t.on_accent);
if resp.on_hover_text(tl!("Join the ArtCraft community on Discord")).clicked() {
let _ = app.run("ui.discord", json!({}));
}
ui.add_space(8.0);
}
// Search ("Tell me").
let (r, resp) = ui.allocate_exact_size(vec2(260.0, control_h), Sense::click());
ui.painter().rect(r, 6.0, if resp.hovered() { t.input } else { t.ribbon }, Stroke::new(1.0, t.border), egui::StrokeKind::Inside);
+1 -3
View File
@@ -2328,11 +2328,9 @@ fn body(app: &mut WordApp, ui: &mut Ui, d: &mut Dialog) -> bool {
let build = option_env!("WORDCRAFT_BUILD_SHA").map(|s| s.get(..8).unwrap_or(s)).unwrap_or(tl!("development build"));
ui.label(crate::i18n::fmt(tl!("Version {version} ({build})"), &[("version", env!("CARGO_PKG_VERSION")), ("build", build)]));
ui.label(tl!(
"A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team."
"A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps."
));
ui.add_space(6.0);
ui.hyperlink_to(tl!("getartcraft.com/apps/wordcraft"), "https://getartcraft.com/apps/wordcraft");
ui.hyperlink_to(tl!("Join us on Discord: discord.gg/artcraft"), "https://discord.gg/artcraft");
ui.hyperlink_to(tl!("Source code: github.com/storytold/wordcraft"), "https://github.com/storytold/wordcraft");
ui.add_space(6.0);
ui.label(
+1 -1
View File
@@ -154,7 +154,7 @@ impl Exempt {
|| plain.starts_with('@') // contributor handles
|| plain.starts_with("Style") || plain.starts_with("Table Style ") // a new style's default name
|| plain.contains('┬') || plain.contains('\u{2061}') // equation input (UnicodeMath), drawn as math
|| matches!(plain, "WordCraft" | "WordCraft User" | "Discord" | "https://" | "auto" | "I. II. III." | "i. ii. iii.")
|| matches!(plain, "WordCraft" | "WordCraft User" | "https://" | "auto" | "I. II. III." | "i. ii. iii.")
|| plain == "CONFIDENTIAL" // the watermark dialog's text: document content, kept as typed
|| plain == "Figure 1" // the caption dialog's sample: the label goes into the document as is
}
-7
View File
@@ -19,7 +19,6 @@
(no style) (без стил)
(no suggestions) (няма предложения)
1.5 Line Spacing Междуредие 1,5
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. Безплатен текстообработващ редактор с отворен код, написан от нулата на Rust.\nЧаст от Crafting Apps на екипа на ArtCraft.
About Относно
About WordCraft За WordCraft
Accept Приемане
@@ -221,7 +220,6 @@
Comment Коментар
Comments Коментари
Comments Pane Панел с коментари
Community\nDiscord Общност\nв Discord
Compact Компактно
Compare Сравняване
Compress Pictures Компресиране на изображенията
@@ -274,8 +272,6 @@
Different First Page Различна първа страница
Different Odd & Even Pages Различни четни и нечетни страници
Direct formatting Директно форматиране
Discord Discord
Discord community Общност в Discord
Display Показване
Display for Review Показване за преглед
Distribute Columns Разпределяне на колоните
@@ -440,8 +436,6 @@
Inspect Styles at Selection Проверка на стиловете при селекцията
Interface language: Език на интерфейса:
Italic Курсив
Join the ArtCraft community on Discord Присъединете се към общността на ArtCraft в Discord
Join us on Discord: discord.gg/artcraft Присъединете се към нас в Discord: discord.gg/artcraft
Justify Двустранно подравняване
Keep Lines Together Редовете заедно
Keep Text Only Запазване само на текста
@@ -1149,7 +1143,6 @@
Insert a new equation (Alt+=) Вмъкване на ново уравнение (Alt+=)
Leave the equation (Esc) Излизане от уравнението (Esc)
Preview Визуализация
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
Draw Ink Рисуване с мастило
Erase Ink Изтриване на мастило
Hide Ink Скриване на мастилото
Can't render this file because it contains an unexpected character in line 7 and column 25.
-7
View File
@@ -22,7 +22,6 @@
1/4 Em Space Čtvrtčtverčíková mezera
3-D 3D
A file dialog is already open. Dialogové okno souboru je již otevřené.
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. Bezplatný textový procesor s otevřeným zdrojovým kódem napsaný od základu v jazyce Rust.\nSoučást sady Crafting Apps od týmu ArtCraft.
A mail merge field Pole hromadné korespondence
A numbered sequence (figures, tables…) Číslovaná posloupnost (obrázky, tabulky…)
A password is required to open this document. K otevření tohoto dokumentu je vyžadováno heslo.
@@ -230,7 +229,6 @@
Comment Komentář
Comments Komentáře
Comments Pane Podokno komentářů
Community\nDiscord Komunita\nDiscord
Compact Kompaktní
Company Společnost
Compare Porovnat
@@ -310,8 +308,6 @@
Direct formatting Přímé formátování
Direction: Směr:
Directory Katalog
Discord Discord
Discord community Komunita na Discordu
Display Zobrazení
Display for Review Zobrazení k revizi
Distribute Columns Rovnoměrně rozložit sloupce
@@ -462,7 +458,6 @@
from Unicode (hex) z Unicode (hex)
Function Funkce
General Obecné
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
Glow Záře
Glow Colors Barvy záře
Go To Přejít na
@@ -569,8 +564,6 @@
Interface theme: Motiv rozhraní:
Interface\nTheme Motiv\nrozhraní
Italic Kurzíva
Join the ArtCraft community on Discord Připojte se ke komunitě ArtCraft na Discordu
Join us on Discord: discord.gg/artcraft Připojte se k nám na Discordu: discord.gg/artcraft
Justification Zarovnání
Justified Do bloku
Justify Do bloku
Can't render this file because it contains an unexpected character in line 6 and column 25.
-7
View File
@@ -14,7 +14,6 @@
(no style) (keine Formatvorlage)
(no suggestions) (keine Vorschläge)
1.5 Line Spacing Zeilenabstand 1,5
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. Ein kostenloses, quelloffenes Textverarbeitungsprogramm, von Grund auf in Rust geschrieben.\nTeil der Crafting Apps des ArtCraft-Teams.
About Info
About WordCraft Über WordCraft
Accept Annehmen
@@ -227,7 +226,6 @@
Comment Kommentar
Comments Kommentare
Comments Pane Kommentarbereich
Community\nDiscord Community-\nDiscord
Compact Kompakt
Compare Vergleichen
Compress Pictures Bilder komprimieren
@@ -280,8 +278,6 @@
Dictate Diktieren
Different First Page Andere erste Seite
Different Odd & Even Pages Andere gerade und ungerade Seiten
Discord Discord
Discord community Discord-Community
Display Anzeige
Display for Review Anzeige zur Überprüfung
Distribute Columns Spalten verteilen
@@ -439,8 +435,6 @@
Inspect Document Dokument prüfen
Interface language: Benutzeroberflächensprache:
Italic Kursiv
Join the ArtCraft community on Discord Treten Sie der ArtCraft-Community auf Discord bei
Join us on Discord: discord.gg/artcraft Besuchen Sie uns auf Discord: discord.gg/artcraft
Justify Blocksatz
Keep Lines Together Zeilen nicht trennen
Keep lines together Zeilen nicht trennen
@@ -1128,7 +1122,6 @@
Insert a new equation (Alt+=) Eine neue Formel einfügen (Alt+=)
Leave the equation (Esc) Die Formel verlassen (Esc)
Preview Vorschau
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
Draw Ink Freihand zeichnen
Erase Ink Freihand radieren
Hide Ink Freihand ausblenden
Can't render this file because it contains an unexpected character in line 6 and column 25.
+4 -7
View File
@@ -16,7 +16,6 @@
(no style) (sin estilo)
(no suggestions) (sin sugerencias)
1.5 Line Spacing Interlineado 1,5
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. Un procesador de textos gratuito y de código abierto, escrito desde cero en Rust.\nForma parte de las Crafting Apps del equipo de ArtCraft.
About Acerca de
About WordCraft Acerca de WordCraft
Accept Aceptar
@@ -271,7 +270,6 @@
Comment Comentario
Comments Comentarios
Comments Pane Panel de comentarios
Community\nDiscord Comunidad\nDiscord
Compact Compacto
Compare Comparar
Compress Pictures Comprimir imágenes
@@ -326,8 +324,6 @@
Different First Page Primera página diferente
Different Odd & Even Pages Páginas pares e impares diferentes
Direct formatting Formato directo
Discord Discord
Discord community Comunidad de Discord
Display Mostrar
Display for Review Mostrar para revisión
Distribute Columns Distribuir columnas
@@ -504,8 +500,6 @@
Inspect Styles at Selection Inspeccionar estilos de la selección
Interface language: Idioma de la interfaz:
Italic Cursiva
Join the ArtCraft community on Discord Únete a la comunidad de ArtCraft en Discord
Join us on Discord: discord.gg/artcraft Únete a nosotros en Discord: discord.gg/artcraft
Justify Justificar
Keep Lines Together Mantener líneas juntas
Keep Text Only Mantener solo el texto
@@ -1215,6 +1209,10 @@
Light Claro
Dark Oscuro
Use system setting Usar la configuración del sistema
Catppuccin Latte Catppuccin Latte
Catppuccin Frappé Catppuccin Frappé
Catppuccin Macchiato Catppuccin Macchiato
Catppuccin Mocha Catppuccin Mocha
A file dialog is already open. Ya hay un cuadro de diálogo de archivo abierto.
Height: Alto:
Width: Ancho:
@@ -1240,7 +1238,6 @@
Insert a new equation (Alt+=) Insertar una ecuación nueva (Alt+=)
Leave the equation (Esc) Salir de la ecuación (Esc)
Preview Vista previa
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
Draw Ink Dibujar tinta
Erase Ink Borrar tinta
Hide Ink Ocultar tinta
Can't render this file because it contains an unexpected character in line 6 and column 25.
+4 -7
View File
@@ -11,7 +11,6 @@
(no suggestions) (soovitused puuduvad)
1.5 Line Spacing Reavahe 1,5
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. Tasuta avatud lähtekoodiga tekstitöötlusprogramm, mis on kirjutatud Rustis.\nArtCrafti meeskonna Crafting Appsi osa.
About Teave
About WordCraft WordCrafti teave
Accept Nõustu
@@ -147,7 +146,6 @@
Comment Kommentaar
Comments Kommentaarid
Comments Pane Kommentaaripaan
Community\nDiscord Discordi\nkogukond
Compact Tihe
Compare Võrdle
Compress Pictures Tihenda pildid
@@ -201,8 +199,6 @@
Different First Page Erinev esileht
Different Odd & Even Pages Erinevad paaris- ja paaritud lehed
Direct formatting Otsevormindus
Discord Discord
Discord community Discordi kogukond
Display Kuva
Display for Review Kuva läbivaatuseks
Distribute Columns Jaota veerud ühtlaselt
@@ -383,8 +379,6 @@
Interface language Kasutajaliidese keel
Interface language: Kasutajaliidese keel:
Italic Kaldkiri
Join the ArtCraft community on Discord Liitu ArtCrafti kogukonnaga Discordis
Join us on Discord: discord.gg/artcraft Liitu meiega Discordis: discord.gg/artcraft
Justify Rööpjoonda
Keep Lines Together Hoia read koos
Keep Text Only Säilita ainult tekst
@@ -1085,6 +1079,10 @@
Light Hele
Dark Tume
Use system setting Kasuta süsteemi seadistust
Catppuccin Latte Catppuccin Latte
Catppuccin Frappé Catppuccin Frappé
Catppuccin Macchiato Catppuccin Macchiato
Catppuccin Mocha Catppuccin Mocha
A file dialog is already open. Failidialoog on juba avatud.
Alt text Asendustekst
Indent from left: Taane vasakult:
@@ -1113,7 +1111,6 @@
Left Margin Vasak veeris
Repeat as header row on each page Korda päisereana igal lehel
Insert a new equation (Alt+=) Lisa uus võrrand (Alt+=)
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
Bottom Margin Alumine veeris
Cell Lahter
Specify height: Määra kõrgus:
Can't render this file because it contains an unexpected character in line 453 and column 13.
-7
View File
@@ -12,7 +12,6 @@
(no style) (Aucun style)
(no suggestions) (aucune suggestion)
1.5 Line Spacing Interligne 1,5
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. Un traitement de texte gratuit et open source, écrit de zéro en Rust.\nPartie de la suite Crafting Apps de l’équipe ArtCraft.
About À propos
About WordCraft À propos de WordCraft
Accept Accepter
@@ -219,7 +218,6 @@
Comment Commentaire
Comments Commentaires
Comments Pane Volet Commentaires
Community\nDiscord Communauté\nDiscord
Compact Compact
Compare Comparer
Compress Pictures Compresser les images
@@ -291,8 +289,6 @@
Different First Page Première page différente
Different Odd & Even Pages Pages paires et impaires différentes
Direct formatting Mise en forme directe
Discord Discord
Discord community Communauté Discord
Display Affichage
Display for Review Affichage pour la révision
Distribute Columns Répartir les colonnes
@@ -452,8 +448,6 @@
Inspect Styles at Selection Inspecter les styles de la sélection
Interface language: Langue de l’interface :
Italic Italique
Join the ArtCraft community on Discord Rejoignez la communauté ArtCraft sur Discord
Join us on Discord: discord.gg/artcraft Rejoignez-nous sur Discord : discord.gg/artcraft
Justify Justifier
Keep Lines Together Lignes solidaires
Keep lines together Lignes solidaires
@@ -1144,7 +1138,6 @@
Insert a new equation (Alt+=) Insérer une nouvelle équation (Alt+=)
Leave the equation (Esc) Quitter l’équation (Esc)
Preview Aperçu
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
Draw Ink Dessiner à l’encre
Erase Ink Effacer l’encre
Hide Ink Masquer l’encre
Can't render this file because it contains an unexpected character in line 7 and column 25.
-7
View File
@@ -17,7 +17,6 @@
(no suggestions) (nincs javaslat)
1.5 Line Spacing 1,5-es sorköz
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. Ingyenes, nyílt forráskódú szövegszerkesztő, az alapoktól Rustban írva.\nA Crafting Apps családba tartozik, az ArtCraft csapatától.
AaBbCcDd AaÁáBbCc
About Névjegy
About WordCraft A WordCraft névjegye
@@ -145,7 +144,6 @@
Comment Megjegyzés
Comments Megjegyzések
Comments Pane Megjegyzések panel
Community\nDiscord Közösségi\nDiscord
Compact Tömör
Compare Összehasonlítás
Compress Pictures Képek tömörítése
@@ -197,8 +195,6 @@
Dictate Diktálás
Different First Page Eltérő első oldal
Different Odd & Even Pages Eltérő páros és páratlan oldalak
Discord Discord
Discord community Discord-közösség
Display Megjelenítés
Display for Review Megjelenítés véleményezéshez
Distribute Columns Oszlopok egyenletes elosztása
@@ -368,8 +364,6 @@
Intense Reference Erős hivatkozás
Interface language: Felület nyelve:
Italic Dőlt
Join the ArtCraft community on Discord Csatlakozz az ArtCraft közösséghez a Discordon
Join us on Discord: discord.gg/artcraft Csatlakozz hozzánk a Discordon: discord.gg/artcraft
Justify Sorkizárás
Keep Lines Together Sorok együtt tartása
Keep lines together Sorok együtt tartása
@@ -1082,7 +1076,6 @@
Insert a new equation (Alt+=) Új egyenlet beszúrása (Alt+=)
Leave the equation (Esc) Kilépés az egyenletből (Esc)
Preview Előnézet
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
Browse… Tallózás…
AaBbYyZz AaBbYyZz ŐőŰű
Align Top Left Igazítás balra fel
Can't render this file because it contains an unexpected character in line 6 and column 25.
-7
View File
@@ -17,7 +17,6 @@
(no style) (nessuno stile)
(no suggestions) (nessun suggerimento)
1.5 Line Spacing Interlinea 1,5
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. Un elaboratore di testi gratuito e open source, scritto da zero in Rust.\nFa parte delle Crafting Apps del team ArtCraft.
About Informazioni
About WordCraft Informazioni su WordCraft
Accept Accetta
@@ -218,7 +217,6 @@
Comment Commento
Comments Commenti
Comments Pane Riquadro Commenti
Community\nDiscord Community\nDiscord
Compact Compatto
Compare Confronta
Compress Pictures Comprimi immagini
@@ -271,8 +269,6 @@
Different First Page Prima pagina diversa
Different Odd & Even Pages Pagine pari e dispari diverse
Direct formatting Formattazione diretta
Discord Discord
Discord community Community Discord
Display Visualizza
Display for Review Visualizza per revisione
Distribute Columns Distribuisci colonne
@@ -436,8 +432,6 @@
Inspect Styles at Selection Ispeziona stili nella selezione
Interface language: Lingua dell'interfaccia:
Italic Corsivo
Join the ArtCraft community on Discord Unisciti alla community di ArtCraft su Discord
Join us on Discord: discord.gg/artcraft Unisciti a noi su Discord: discord.gg/artcraft
Justify Giustifica
Keep Lines Together Mantieni righe insieme
Keep Text Only Mantieni solo testo
@@ -1134,7 +1128,6 @@
Insert a new equation (Alt+=) Inserisci una nuova equazione (Alt+=)
Leave the equation (Esc) Esci dall'equazione (Esc)
Preview Anteprima
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
Draw Ink Disegna a penna
Erase Ink Cancella penna
Hide Ink Nascondi penna
Can't render this file because it contains an unexpected character in line 6 and column 25.
+4 -7
View File
@@ -3,7 +3,6 @@
(no style) (スタイルなし)
(no suggestions) (候補なし)
1.5 Line Spacing 1.5 行
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. Rust でゼロから書かれた、無料のオープンソース ワープロです。\nArtCraft チームの Crafting Apps のひとつです。
About 情報
About WordCraft WordCraft について
Accept 承諾
@@ -279,7 +278,6 @@
Comment コメント
Comments コメント
Comments Pane コメント ウィンドウ
Community\nDiscord コミュニティ\nDiscord
Compact コンパクト
Compare 比較
Compress Pictures 図の圧縮
@@ -334,8 +332,6 @@
Dictate ディクテーション
Different First Page 先頭ページのみ別指定
Different Odd & Even Pages 奇数/偶数ページ別指定
Discord Discord
Discord community Discord コミュニティ
Display 表示
Display for Review 変更内容の表示
Distribute Columns 列の幅を揃える
@@ -494,8 +490,6 @@
Inspect Document ドキュメント検査
Interface language: 表示言語:
Italic 斜体
Join the ArtCraft community on Discord Discord の ArtCraft コミュニティに参加
Join us on Discord: discord.gg/artcraft Discord で参加: discord.gg/artcraft
Justify 両端揃え
Keep Lines Together 段落を分割しない
Keep lines together 段落を分割しない
@@ -1177,6 +1171,10 @@
Light ライト
Dark ダーク
Use system setting システム設定を使用
Catppuccin Latte Catppuccin Latte
Catppuccin Frappé Catppuccin Frappé
Catppuccin Macchiato Catppuccin Macchiato
Catppuccin Mocha Catppuccin Mocha
A file dialog is already open. ファイル ダイアログが既に開いています。
Height: 高さ:
Width: 幅:
@@ -1202,7 +1200,6 @@
Insert a new equation (Alt+=) 新しい数式を挿入 (Alt+=)
Leave the equation (Esc) 数式を終了 (Esc)
Preview プレビュー
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
Draw Ink インクで描く
Erase Ink インクを消す
Hide Ink インクを隠す
Can't render this file because it contains an unexpected character in line 557 and column 13.
-7
View File
@@ -17,7 +17,6 @@
(no suggestions) (brak propozycji)
1.5 Line Spacing Interlinia 1,5
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. Darmowy edytor tekstu o otwartym kodzie, napisany od podstaw w języku Rust.\nCzęść rodziny Crafting Apps zespołu ArtCraft.
About Informacje
About WordCraft O programie WordCraft
Accept Zaakceptuj
@@ -146,7 +145,6 @@
Comment Komentarz
Comments Komentarze
Comments Pane Okienko komentarzy
Community\nDiscord Społeczność\nDiscord
Compact Zwarte
Compare Porównaj
Compress Pictures Kompresuj obrazy
@@ -198,8 +196,6 @@
Different First Page Inna pierwsza strona
Different Odd & Even Pages Inne strony parzyste i nieparzyste
Direct formatting Formatowanie bezpośrednie
Discord Discord
Discord community Społeczność na Discordzie
Display Wyświetlanie
Display for Review Wyświetlanie do recenzji
Distribute Columns Rozłóż kolumny
@@ -360,8 +356,6 @@
Inspect Styles at Selection Przejrzyj style zaznaczenia
Interface language: Język interfejsu:
Italic Kursywa
Join the ArtCraft community on Discord Dołącz do społeczności ArtCraft na Discordzie
Join us on Discord: discord.gg/artcraft Dołącz do nas na Discordzie: discord.gg/artcraft
Justify Wyjustuj
Keep Lines Together Zachowaj wiersze razem
Keep Text Only Zachowaj tylko tekst
@@ -1043,7 +1037,6 @@
Insert a new equation (Alt+=) Wstaw nowe równanie (Alt+=)
Leave the equation (Esc) Opuść równanie (Esc)
Preview Podgląd
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
English (United Kingdom) Angielski (Wielka Brytania)
Polish Polski
Do Not Check Spelling or Grammar Nie sprawdzaj pisowni ani gramatyki
Can't render this file because it contains an unexpected character in line 6 and column 25.
+4 -7
View File
@@ -14,7 +14,6 @@
(no style) (sem estilo)
(no suggestions) (sem sugestões)
1.5 Line Spacing Espaçamento de 1,5 linha
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. Um processador de texto gratuito e de código aberto, escrito do zero em Rust.\nFaz parte dos Crafting Apps da equipe ArtCraft.
About Sobre
About WordCraft Sobre o WordCraft
Accept Aceitar
@@ -260,7 +259,6 @@
Comment Comentário
Comments Comentários
Comments Pane Painel de comentários
Community\nDiscord Comunidade\nDiscord
Compact Compacto
Compare Comparar
Compress Pictures Compactar imagens
@@ -337,8 +335,6 @@
Dictate Ditar
Different First Page Primeira página diferente
Different Odd & Even Pages Páginas ímpares e pares diferentes
Discord Discord
Discord community Comunidade do Discord
Display Exibição
Display for Review Exibir para revisão
Distribute Columns Distribuir colunas uniformemente
@@ -495,8 +491,6 @@
Inspect Document Inspecionar documento
Interface language: Idioma da interface:
Italic Itálico
Join the ArtCraft community on Discord Junte-se à comunidade ArtCraft no Discord
Join us on Discord: discord.gg/artcraft Junte-se a nós no Discord: discord.gg/artcraft
Justify Justificar
Keep Lines Together Manter linhas juntas
Keep lines together Manter linhas juntas
@@ -1189,6 +1183,10 @@
Light Claro
Dark Escuro
Use system setting Usar a configuração do sistema
Catppuccin Latte Catppuccin Latte
Catppuccin Frappé Catppuccin Frappé
Catppuccin Macchiato Catppuccin Macchiato
Catppuccin Mocha Catppuccin Mocha
A file dialog is already open. Já há uma caixa de diálogo de arquivo aberta.
Height: Altura:
Width: Largura:
@@ -1214,7 +1212,6 @@
Insert a new equation (Alt+=) Inserir uma nova equação (Alt+=)
Leave the equation (Esc) Sair da equação (Esc)
Preview Visualizar
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
Draw Ink Desenhar tinta
Erase Ink Apagar tinta
Hide Ink Ocultar tinta
Can't render this file because it contains an unexpected character in line 6 and column 25.
+4 -7
View File
@@ -15,7 +15,6 @@
(no suggestions) (нет вариантов)
1.5 Line Spacing Полуторный интервал
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. Бесплатный текстовый процессор с открытым исходным кодом, написанный с нуля на Rust.\nВходит в Crafting Apps от команды ArtCraft.
AaBbCcDd АаБбВвГг
About О программе
About WordCraft О WordCraft
@@ -143,7 +142,6 @@
Comment Комментарий
Comments Комментарии
Comments Pane Область комментариев
Community\nDiscord Сообщество\nDiscord
Compact Компактный
Compare Сравнить
Compress Pictures Сжать рисунки
@@ -197,8 +195,6 @@
Dictate Диктовка
Different First Page Особая первая страница
Different Odd & Even Pages Разные для чётных и нечётных страниц
Discord Discord
Discord community Сообщество в Discord
Display Отображение
Display for Review Отображение исправлений
Distribute Columns Выровнять ширину столбцов
@@ -369,8 +365,6 @@
Intense Reference Сильная ссылка
Interface language: Язык интерфейса:
Italic Курсив
Join the ArtCraft community on Discord Присоединяйтесь к сообществу ArtCraft в Discord
Join us on Discord: discord.gg/artcraft Присоединяйтесь к нам в Discord: discord.gg/artcraft
Justify По ширине
Keep Lines Together Не разрывать абзац
Keep lines together Не разрывать абзац
@@ -1067,6 +1061,10 @@ preview Title Пример
Light Светлая
Dark Тёмная
Use system setting Как в системе
Catppuccin Latte Catppuccin Latte
Catppuccin Frappé Catppuccin Frappé
Catppuccin Macchiato Catppuccin Macchiato
Catppuccin Mocha Catppuccin Mocha
A file dialog is already open. Окно выбора файла уже открыто.
Height: Высота:
Width: Ширина:
@@ -1092,7 +1090,6 @@ preview Title Пример
Insert a new equation (Alt+=) Вставить новое уравнение (Alt+=)
Leave the equation (Esc) Выйти из уравнения (Esc)
Preview Предварительный просмотр
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
Browse… Обзор…
# Equation gallery, themes, watermarks, paper sizes, table styles and other strings the
Can't render this file because it contains an unexpected character in line 7 and column 25.
+4 -7
View File
@@ -15,7 +15,6 @@
(no suggestions) (nema predloga)
(picture or object) (slika ili objekat)
1.5 Line Spacing Proređenost 1,5
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. Besplatan, otvoreni obrađivač teksta napisan od nule u Rust-u.\nDeo Crafting Apps paketa tima ArtCraft.
A password is required to open this document. Za otvaranje ovog dokumenta potrebna je lozinka.
About O programu
About WordCraft O WordCraft-u
@@ -327,7 +326,6 @@
Comment Komentar
Comments Komentari
Comments Pane Okno komentara
Community\nDiscord Zajednica\nna Discord-u
Compact Sažeto
Compare Upoređivanje
Compress Pictures Kompresuj slike
@@ -382,8 +380,6 @@
Dictate Diktiranje
Different First Page Drugačija prva strana
Different Odd & Even Pages Drugačije neparne i parne strane
Discord Discord
Discord community Zajednica na Discord-u
Display Prikaz
Display for Review Prikaz za pregled
Distribute Columns Ravnomerno razmesti kolone
@@ -542,8 +538,6 @@
Inspect Document Pregledaj dokument
Interface language: Jezik interfejsa:
Italic Kurziv
Join the ArtCraft community on Discord Pridružite se ArtCraft zajednici na Discord-u
Join us on Discord: discord.gg/artcraft Pridružite nam se na Discord-u: discord.gg/artcraft
Justify Obostrano poravnanje
Keep Lines Together Zadrži redove zajedno
Keep lines together Zadrži redove zajedno
@@ -1195,6 +1189,10 @@
Light Svetla
Dark Tamna
Use system setting Prema podešavanju sistema
Catppuccin Latte Catppuccin Latte
Catppuccin Frappé Catppuccin Frappé
Catppuccin Macchiato Catppuccin Macchiato
Catppuccin Mocha Catppuccin Mocha
Letters Pisma
E-mail Messages Poruke e-pošte
Directory Imenik
@@ -1267,7 +1265,6 @@
Reset Crop Poništi isecanje
Insert a new equation (Alt+=) Umetni novu jednačinu (Alt+=)
Leave the equation (Esc) Napusti jednačinu (Esc)
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
Draw Ink Crtaj mastilom
Erase Ink Obriši mastilo
Hide Ink Sakrij mastilo
Can't render this file because it contains an unexpected character in line 6 and column 25.
+4 -7
View File
@@ -19,7 +19,6 @@
(no suggestions) (нема предлога)
(picture or object) (слика или објекат)
1.5 Line Spacing Проређеност 1,5
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. Бесплатан, отворени обрађивач текста написан од нуле у Rust-у.\nДео Crafting Apps пакета тима ArtCraft.
A password is required to open this document. За отварање овог документа потребна је лозинка.
About О програму
About WordCraft О WordCraft-у
@@ -331,7 +330,6 @@
Comment Коментар
Comments Коментари
Comments Pane Окно коментара
Community\nDiscord Заједница\nна Discord-у
Compact Сажето
Compare Упоређивање
Compress Pictures Компресуј слике
@@ -386,8 +384,6 @@
Dictate Диктирање
Different First Page Другачија прва страна
Different Odd & Even Pages Другачије непарне и парне стране
Discord Discord
Discord community Заједница на Discord-у
Display Приказ
Display for Review Приказ за преглед
Distribute Columns Равномерно размести колоне
@@ -546,8 +542,6 @@
Inspect Document Прегледај документ
Interface language: Језик интерфејса:
Italic Курзив
Join the ArtCraft community on Discord Придружите се ArtCraft заједници на Discord-у
Join us on Discord: discord.gg/artcraft Придружите нам се на Discord-у: discord.gg/artcraft
Justify Обострано поравнање
Keep Lines Together Задржи редове заједно
Keep lines together Задржи редове заједно
@@ -1199,6 +1193,10 @@
Light Светла
Dark Тамна
Use system setting Према подешавању система
Catppuccin Latte Catppuccin Latte
Catppuccin Frappé Catppuccin Frappé
Catppuccin Macchiato Catppuccin Macchiato
Catppuccin Mocha Catppuccin Mocha
Letters Писма
E-mail Messages Поруке е-поште
Directory Именик
@@ -1271,7 +1269,6 @@
Reset Crop Поништи исецање
Insert a new equation (Alt+=) Уметни нову једначину (Alt+=)
Leave the equation (Esc) Напусти једначину (Esc)
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
Draw Ink Цртај мастилом
Erase Ink Обриши мастило
Hide Ink Сакриј мастило
Can't render this file because it contains an unexpected character in line 11 and column 25.
+4 -7
View File
@@ -14,7 +14,6 @@
(no suggestions) (öneri yok)
1.5 Line Spacing 1,5 Satır Aralığı
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. Rust ile sıfırdan yazılmış ücretsiz, açık kaynak bir kelime işlemci.\nArtCraft ekibinin Crafting Apps ailesinin bir parçası.
AaBbCcDd AaBbCcÇç
About Hakkında
About WordCraft WordCraft Hakkında
@@ -142,7 +141,6 @@
Comment Yorum
Comments Yorumlar
Comments Pane Yorumlar Bölmesi
Community\nDiscord Topluluk\nDiscord'u
Compact Kompakt
Compare Karşılaştır
Compress Pictures Resimleri Sıkıştır
@@ -195,8 +193,6 @@
Dictate Dikte Et
Different First Page İlk Sayfa Farklı
Different Odd & Even Pages Tek ve Çift Sayfalar Farklı
Discord Discord
Discord community Discord topluluğu
Display Görüntü
Display for Review İnceleme Görünümü
Distribute Columns Sütunları Eşit Dağıt
@@ -367,8 +363,6 @@
Inspect Document Belgeyi İncele
Interface language: Arayüz dili:
Italic İtalik
Join the ArtCraft community on Discord Discord'da ArtCraft topluluğuna katılın
Join us on Discord: discord.gg/artcraft Discord'da bize katılın: discord.gg/artcraft
Justify İki Yana Yasla
Keep Lines Together Satırları Birlikte Tut
Keep lines together Satırları birlikte tut
@@ -1067,6 +1061,10 @@ preview Title Örnek
Light Açık
Dark Koyu
Use system setting Sistem ayarını kullan
Catppuccin Latte Catppuccin Latte
Catppuccin Frappé Catppuccin Frappé
Catppuccin Macchiato Catppuccin Macchiato
Catppuccin Mocha Catppuccin Mocha
A file dialog is already open. Bir dosya iletişim kutusu zaten açık.
Height: Yükseklik:
Width: Genişlik:
@@ -1092,7 +1090,6 @@ preview Title Örnek
Insert a new equation (Alt+=) Yeni denklem ekle (Alt+=)
Leave the equation (Esc) Denklemden çık (Esc)
Preview Önizleme
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
Browse… Gözat…
# Equation gallery, themes, watermarks, paper sizes, table styles and other strings the
Can't render this file because it contains an unexpected character in line 433 and column 13.
+4 -7
View File
@@ -14,7 +14,6 @@
(no style) (без стилю)
(no suggestions) (немає пропозицій)
1.5 Line Spacing Міжрядковий інтервал 1,5
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. Безкоштовний текстовий процесор із відкритим кодом, написаний з нуля мовою Rust.\nЧастина Crafting Apps від команди ArtCraft.
About Про програму
About WordCraft Про WordCraft
Accept Прийняти
@@ -267,7 +266,6 @@
Comment Коментар
Comments Коментарі
Comments Pane Панель коментарів
Community\nDiscord Спільнота\nDiscord
Compact Компактний
Compare Порівняти
Compress Pictures Стиснути зображення
@@ -345,8 +343,6 @@
Different First Page Інша перша сторінка
Different Odd & Even Pages Різні парні й непарні сторінки
Direct formatting Пряме форматування
Discord Discord
Discord community Спільнота Discord
Display Відображення
Display for Review Відображення для рецензування
Distribute Columns Розподілити стовпці
@@ -508,8 +504,6 @@
Inspect Styles at Selection Переглянути стилі у виділенні
Interface language: Мова інтерфейсу:
Italic Курсив
Join the ArtCraft community on Discord Приєднатися до спільноти ArtCraft у Discord
Join us on Discord: discord.gg/artcraft Приєднуйтеся до нас у Discord: discord.gg/artcraft
Justify За шириною
Keep Lines Together Не розривати рядки абзацу
Keep lines together Не розривати рядки абзацу
@@ -1189,6 +1183,10 @@
Light Світла
Dark Темна
Use system setting Як у системі
Catppuccin Latte Catppuccin Latte
Catppuccin Frappé Catppuccin Frappé
Catppuccin Macchiato Catppuccin Macchiato
Catppuccin Mocha Catppuccin Mocha
A file dialog is already open. Діалогове вікно файлу вже відкрито.
Height: Висота:
Width: Ширина:
@@ -1214,7 +1212,6 @@
Insert a new equation (Alt+=) Вставити нове рівняння (Alt+=)
Leave the equation (Esc) Вийти з рівняння (Esc)
Preview Попередній перегляд
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
Draw Ink Малювати чорнилом
Erase Ink Стерти чорнило
Hide Ink Сховати чорнило
Can't render this file because it contains an unexpected character in line 6 and column 31.
+4 -7
View File
@@ -15,7 +15,6 @@
(no style) (无样式)
(no suggestions) (无建议)
1.5 Line Spacing 1.5 倍行距
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. 一款用 Rust 从零编写的免费开源文字处理软件。\n属于 ArtCraft 团队的 Crafting Apps 系列。
About 关于
About WordCraft 关于 WordCraft
Accept 接受
@@ -291,7 +290,6 @@
Comment 批注
Comments 批注
Comments Pane 批注窗格
Community\nDiscord 社区\nDiscord
Compact 紧凑
Compare 比较
Compress Pictures 压缩图片
@@ -346,8 +344,6 @@
Dictate 听写
Different First Page 首页不同
Different Odd & Even Pages 奇偶页不同
Discord Discord
Discord community Discord 社区
Display 显示
Display for Review 显示以供审阅
Distribute Columns 平均分布各列
@@ -506,8 +502,6 @@
Inspect Document 检查文档
Interface language: 界面语言:
Italic 倾斜
Join the ArtCraft community on Discord 加入 Discord 上的 ArtCraft 社区
Join us on Discord: discord.gg/artcraft 在 Discord 上加入我们:discord.gg/artcraft
Justify 两端对齐
Keep Lines Together 段中不分页
Keep lines together 段中不分页
@@ -1189,6 +1183,10 @@
Light 浅色
Dark 深色
Use system setting 使用系统设置
Catppuccin Latte Catppuccin Latte
Catppuccin Frappé Catppuccin Frappé
Catppuccin Macchiato Catppuccin Macchiato
Catppuccin Mocha Catppuccin Mocha
A file dialog is already open. 已有一个文件对话框处于打开状态。
Height: 高度:
Width: 宽度:
@@ -1214,7 +1212,6 @@
Insert a new equation (Alt+=) 插入新公式 (Alt+=)
Leave the equation (Esc) 退出公式 (Esc)
Preview 预览
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
Draw Ink 绘制墨迹
Erase Ink 擦除墨迹
Hide Ink 隐藏墨迹
Can't render this file because it contains an unexpected character in line 7 and column 25.
+4 -7
View File
@@ -4,7 +4,6 @@
(no style) (無樣式)
(no suggestions) (無建議)
1.5 Line Spacing 1.5 倍行距
A free, open-source word processor written from scratch in Rust.\nPart of the Crafting Apps from the ArtCraft team. 一款以 Rust 從零開始撰寫的免費開源文書處理軟體。\n屬於 ArtCraft 團隊的 Crafting Apps 系列。
About 關於
About WordCraft 關於 WordCraft
Accept 接受
@@ -280,7 +279,6 @@
Comment 註解
Comments 註解
Comments Pane 註解窗格
Community\nDiscord 社群\nDiscord
Compact 緊密
Compare 比較
Compress Pictures 壓縮圖片
@@ -335,8 +333,6 @@
Dictate 聽寫
Different First Page 首頁不同
Different Odd & Even Pages 奇偶頁不同
Discord Discord
Discord community Discord 社群
Display 顯示
Display for Review 顯示以供檢閱
Distribute Columns 平均分配欄寬
@@ -495,8 +491,6 @@
Inspect Document 檢查文件
Interface language: 介面語言:
Italic 斜體
Join the ArtCraft community on Discord 加入 Discord 上的 ArtCraft 社群
Join us on Discord: discord.gg/artcraft 在 Discord 上加入我們:discord.gg/artcraft
Justify 左右對齊
Keep Lines Together 段落中不分頁
Keep lines together 段落中不分頁
@@ -1178,6 +1172,10 @@
Light 淺色
Dark 深色
Use system setting 使用系統設定
Catppuccin Latte Catppuccin Latte
Catppuccin Frappé Catppuccin Frappé
Catppuccin Macchiato Catppuccin Macchiato
Catppuccin Mocha Catppuccin Mocha
A file dialog is already open. 已有一個檔案對話方塊開啟中。
Height: 高度:
Width: 寬度:
@@ -1203,7 +1201,6 @@
Insert a new equation (Alt+=) 插入新方程式 (Alt+=)
Leave the equation (Esc) 離開方程式 (Esc)
Preview 預覽
getartcraft.com/apps/wordcraft getartcraft.com/apps/wordcraft
Draw Ink 繪製筆跡
Erase Ink 擦除筆跡
Hide Ink 隱藏筆跡
Can't render this file because it contains an unexpected character in line 558 and column 13.
-5
View File
@@ -1260,11 +1260,6 @@ pub fn paint(p: &Painter, r: Rect, name: &str, c: Color32, accent: Color32) {
pen.line_c(&[(14.0, 11.0), (14.0, 17.0)], a);
pen.line_c(&[(11.0, 14.0), (17.0, 14.0)], a);
}
"discord" => {
pen.fill(&[(3.0, 6.0), (7.0, 3.5), (13.0, 3.5), (17.0, 6.0), (17.5, 14.0), (13.5, 16.5), (6.5, 16.5), (2.5, 14.0)], a);
pen.fcircle(7.5, 10.5, 1.5, Color32::WHITE);
pen.fcircle(12.5, 10.5, 1.5, Color32::WHITE);
}
// Open: a folder with its flap lifted.
"open" => {
pen.closed(&[(2.5, 5.0), (7.5, 5.0), (9.0, 6.5), (15.5, 6.5), (15.5, 9.0)], c);
+1 -1
View File
@@ -335,7 +335,7 @@ fn controls(tab: &str) -> Vec<Control> {
c("Split", "view.split"),
c("Macros", "tools.macros"),
],
"Help" => vec![d("Help", "about"), c("Community Discord", "ui.discord"), d("Commands", "commands")],
"Help" => vec![d("Help", "about"), d("Commands", "commands")],
"Table Design" => {
vec![m("Shading", "table.shading"), m("Borders", "table.borders"), c("Border Painter", "table.borderPainter")]
}
+5 -8
View File
@@ -189,7 +189,6 @@ pub struct UiState {
#[serde(rename = "dark", skip_serializing)]
pub(crate) legacy_dark: Option<bool>,
pub nav_tab: String,
pub show_discord: bool,
/// User name (File › Options) for comments and tracked changes; empty keeps the default.
pub author: String,
/// Desktop: the main window's size and position, restored at the next launch.
@@ -276,7 +275,6 @@ impl Default for UiState {
animations: theme::Animations::default(),
legacy_dark: None,
nav_tab: "headings".into(),
show_discord: true,
author: String::new(),
window: None,
language: i18n::AUTO.into(),
@@ -1025,11 +1023,14 @@ impl WordApp {
json!({"dark": dark, "theme": self.ui.theme.code()})
}
"ui.theme" => {
// `light`, `dark` or `system` (follow the OS appearance); no value reads it.
// `light`, `dark`, `system` (follow the OS appearance) or a Catppuccin flavour; no value reads it.
if let Some(v) = s("value") {
match theme::Appearance::from_code(v) {
Some(a) => self.ui.theme = a,
None => return Some(Err(format!("unknown theme {v:?}; use light, dark or system"))),
None => {
let codes: Vec<_> = theme::Appearance::ALL.map(theme::Appearance::code).into();
return Some(Err(format!("unknown theme {v:?}; use {}", codes.join(", "))));
}
}
}
json!({"theme": self.ui.theme.code(), "dark": self.ui_is_dark()})
@@ -1114,10 +1115,6 @@ impl WordApp {
.into(),
));
}
"ui.discord" => {
self.canvas.open_url = Some("https://discord.gg/artcraft".into());
json!({})
}
"ui.caretAnimation" => {
// File › Options › Advanced › Animation: `value` true or false turns the caret's
// glide and fading blink on or off; no value reads it.
-1
View File
@@ -180,7 +180,6 @@ fn general(app: &mut WordApp, ui: &mut Ui) {
{
let _ = app.run("view.darkMode", json!({"value": dark_page}));
}
ui.checkbox(&mut app.ui.show_discord, tl!("Show the community button in the title bar"));
default_app_button(app, ui);
ui.add_space(8.0);
section(ui, "Start-up");
-1
View File
@@ -1742,7 +1742,6 @@ fn outlining(app: &mut WordApp, ui: &mut Ui) {
fn help(app: &mut WordApp, ui: &mut Ui) {
group(ui, "Help", None, app, |ui, app| {
big(ui, app, "help", "Help", "ui.dialog", json!({"name": "about"}), false);
big(ui, app, "discord", "Community\nDiscord", "ui.discord", json!({}), false);
});
group(ui, "Agents", None, app, |ui, app| {
big(ui, app, "macros", "Commands", "ui.dialog", json!({"name": "commands"}), false);
+120 -7
View File
@@ -2,6 +2,7 @@
use std::sync::Arc;
use craft_ui::theme::catppuccin::Flavor;
use egui::{Align2, Color32, CornerRadius, FontData, FontDefinitions, FontFamily, FontId, Rect, Stroke, Visuals};
/// WordCraft's app colour (and its darker ink for text on light backgrounds).
@@ -9,7 +10,7 @@ pub const APP_COLOR: Color32 = Color32::from_rgb(0x3B, 0x5B, 0xDB);
pub const APP_INK: Color32 = Color32::from_rgb(0x2B, 0x47, 0xB5);
/// The interface theme setting (File › Options › General, View › Interface Theme): a fixed light or
/// dark palette, or `System`, which follows the OS light/dark appearance live (#115). Dark page
/// dark palette, a Catppuccin flavour, or `System`, which follows the OS light/dark appearance live (#115). Dark page
/// (View › Switch Modes) is separate: it changes how pages are drawn, never the interface (#312).
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(from = "String", into = "String")]
@@ -18,11 +19,34 @@ pub enum Appearance {
Light,
Dark,
System,
CatppuccinLatte,
CatppuccinFrappe,
CatppuccinMacchiato,
CatppuccinMocha,
}
impl Appearance {
/// In menu order.
pub const ALL: [Appearance; 3] = [Appearance::System, Appearance::Light, Appearance::Dark];
pub const ALL: [Appearance; 7] = [
Appearance::System,
Appearance::Light,
Appearance::Dark,
Appearance::CatppuccinLatte,
Appearance::CatppuccinFrappe,
Appearance::CatppuccinMacchiato,
Appearance::CatppuccinMocha,
];
/// The Catppuccin flavour behind this theme, if it is one.
pub fn flavor(self) -> Option<Flavor> {
match self {
Appearance::CatppuccinLatte => Some(Flavor::Latte),
Appearance::CatppuccinFrappe => Some(Flavor::Frappe),
Appearance::CatppuccinMacchiato => Some(Flavor::Macchiato),
Appearance::CatppuccinMocha => Some(Flavor::Mocha),
_ => None,
}
}
/// The value used in `ui.json` and by the `ui.theme` command.
pub fn code(self) -> &'static str {
@@ -30,6 +54,10 @@ impl Appearance {
Appearance::Light => "light",
Appearance::Dark => "dark",
Appearance::System => "system",
Appearance::CatppuccinLatte => "catppuccinLatte",
Appearance::CatppuccinFrappe => "catppuccinFrappe",
Appearance::CatppuccinMacchiato => "catppuccinMacchiato",
Appearance::CatppuccinMocha => "catppuccinMocha",
}
}
@@ -43,6 +71,10 @@ impl Appearance {
Appearance::Light => "Light",
Appearance::Dark => "Dark",
Appearance::System => "Use system setting",
Appearance::CatppuccinLatte => "Catppuccin Latte",
Appearance::CatppuccinFrappe => "Catppuccin Frappé",
Appearance::CatppuccinMacchiato => "Catppuccin Macchiato",
Appearance::CatppuccinMocha => "Catppuccin Mocha",
}
}
@@ -53,15 +85,18 @@ impl Appearance {
Appearance::Light => false,
Appearance::Dark => true,
Appearance::System => system == Some(egui::Theme::Dark),
Appearance::CatppuccinLatte | Appearance::CatppuccinFrappe | Appearance::CatppuccinMacchiato | Appearance::CatppuccinMocha => {
self.flavor().is_some_and(Flavor::is_dark)
}
}
}
/// The egui theme preference: `System` stays automatic rather than resolving to a fixed theme.
pub fn preference(self) -> egui::ThemePreference {
match self {
Appearance::Light => egui::ThemePreference::Light,
Appearance::Dark => egui::ThemePreference::Dark,
Appearance::System => egui::ThemePreference::System,
_ if self.is_dark(None) => egui::ThemePreference::Dark,
_ => egui::ThemePreference::Light,
}
}
}
@@ -320,11 +355,60 @@ impl Tokens {
orange: Color32::from_rgb(0xF0, 0xA0, 0x50),
}
}
/// A Catppuccin flavour on WordCraft's layout: base/mantle/crust surfaces, surface0-2 borders
/// and hovers, Mauve accent, Blue selection.
pub fn catppuccin(f: Flavor) -> Self {
let p = f.palette();
let dark = f.is_dark();
let alpha = |c: Color32, a: u8| Color32::from_rgba_unmultiplied(c.r(), c.g(), c.b(), a);
Tokens {
dark,
title_bar: p.mantle,
ribbon: p.base,
tab_strip: p.mantle,
canvas: p.crust,
panel: p.base,
border: p.surface0,
border_strong: p.surface1,
text: p.text,
text_dim: p.subtext0,
text_disabled: p.overlay0,
icon: p.subtext1,
hover: p.surface0,
pressed: p.surface1,
checked: p.surface1,
accent: p.mauve,
accent_text: p.mauve,
on_accent: if dark { p.crust } else { p.base },
input: if dark { p.crust } else { p.base },
input_border: p.surface1,
group_label: p.overlay1,
ruler: p.mantle,
ruler_margin: p.surface1,
ruler_tick: p.overlay1,
status_bar: p.mantle,
selection: alpha(p.blue, 0x55),
find_highlight: alpha(p.yellow, 0x90),
menu: p.mantle,
blue: p.blue,
red: p.red,
green: p.green,
orange: p.peach,
..if dark { Tokens::dark() } else { Tokens::light() }
}
}
/// The tokens of the current theme: a pinned Catppuccin flavour (see [`apply`]), else light or dark.
pub fn get(ctx: &egui::Context) -> Tokens {
if let Some(t) = ctx.data(|d| d.get_temp::<Option<Tokens>>(egui::Id::new(PINNED_TOKENS))).flatten() {
return t;
}
if ctx.global_style().visuals.dark_mode { Tokens::dark() } else { Tokens::light() }
}
}
/// `ctx.data` key of the Catppuccin tokens [`apply`] pins; `None` when the theme is light/dark/system.
const PINNED_TOKENS: &str = "wordcraft-pinned-tokens";
/// Install the UI fonts (Inter, JetBrains Mono) and the craft-fonts CJK interface faces if built
/// in, Japanese first.
pub fn install_fonts(ctx: &egui::Context) {
@@ -567,8 +651,11 @@ fn tracked_job(text: &str, font: &FontId, tracking: f32, color: Color32) -> egui
/// Setting a concrete theme for `System` would pin the native window too, and macOS then stops
/// reporting appearance changes (#311).
pub fn apply(ctx: &egui::Context, appearance: Appearance) {
ctx.set_visuals_of(egui::Theme::Light, visuals(&Tokens::light()));
ctx.set_visuals_of(egui::Theme::Dark, visuals(&Tokens::dark()));
let pinned = appearance.flavor().map(Tokens::catppuccin);
ctx.data_mut(|d| d.insert_temp(egui::Id::new(PINNED_TOKENS), pinned));
let (light, dark) = (Tokens::light(), Tokens::dark());
ctx.set_visuals_of(egui::Theme::Light, visuals(pinned.filter(|t| !t.dark).as_ref().unwrap_or(&light)));
ctx.set_visuals_of(egui::Theme::Dark, visuals(pinned.filter(|t| t.dark).as_ref().unwrap_or(&dark)));
ctx.all_styles_mut(|s| {
s.spacing.item_spacing = egui::vec2(6.0, 4.0);
s.spacing.button_padding = egui::vec2(8.0, 3.0);
@@ -720,7 +807,7 @@ mod tests {
assert!(semi.iter().any(|n| n.starts_with("fallback ")), "the caption is painted with semibold");
}
/// #656: dialog primary buttons, the Discord pill, the table eraser and the Navigation search
/// #656: dialog primary buttons, the table eraser and the Navigation search
/// highlight take their colours from the theme, not fixed light-theme values.
#[test]
fn interface_colours_come_from_the_theme() {
@@ -742,6 +829,32 @@ mod tests {
/// Symbols written as text in the interface code must exist in the interface fonts (Inter and
/// egui's emoji fallbacks); a missing glyph draws as an empty box, as the panes' "✕" close
/// button once did. Letters are the catalogs' business (see the i18n font tests).
#[test]
fn catppuccin_themes_use_the_flavour_palette() {
use super::{Appearance, Tokens};
let flavours: Vec<_> = Appearance::ALL.into_iter().filter_map(Appearance::flavor).collect();
assert_eq!(flavours.len(), craft_ui::theme::catppuccin::Flavor::ALL.len());
for f in flavours {
let t = Tokens::catppuccin(f);
assert_eq!((t.ribbon, t.panel, t.text, t.accent, t.dark), (f.palette().base, f.palette().base, f.palette().text, f.palette().mauve, f.is_dark()));
}
for a in Appearance::ALL {
assert_eq!(Appearance::from_code(a.code()), Some(a));
}
}
#[test]
fn pinned_catppuccin_tokens_reach_widgets() {
use super::{Appearance, Tokens, apply};
let ctx = egui::Context::default();
apply(&ctx, Appearance::CatppuccinLatte);
assert_eq!(Tokens::get(&ctx).ribbon, craft_ui::theme::catppuccin::Flavor::Latte.palette().base);
apply(&ctx, Appearance::CatppuccinMocha);
assert_eq!(Tokens::get(&ctx).ribbon, craft_ui::theme::catppuccin::Flavor::Mocha.palette().base);
apply(&ctx, Appearance::Dark);
assert_eq!(Tokens::get(&ctx).ribbon, Tokens::dark().ribbon);
}
#[test]
fn interface_symbols_have_glyphs() {
let ctx = egui::Context::default();
-42
View File
@@ -1,42 +0,0 @@
ArtCraft brand assets: license
The ArtCraft name, wordmark and mark (the "ArtCraft Marks"), including every file in this
directory in every color, size and format, are owned by the ArtCraft Team. They are trademarks
and are NOT open source. They are not covered by WordCraft's MIT OR Apache-2.0 license, and nothing in
that license, in NOTICE or in any other file of this repository grants any right to them.
Permission
The ArtCraft Team grants a limited, non-exclusive, non-transferable, revocable, royalty-free
permission to use the ArtCraft Marks only:
1. as part of copies of this repository; and
2. within WordCraft itself, its documentation and its official builds, to identify WordCraft as made
by the ArtCraft team and community and to link to getartcraft.com and its community.
Conditions
The permission holds only while every one of these is true:
- The marks are used exactly as supplied in this directory. Do not redraw, recolor, crop,
stretch, rotate, animate, outline or add effects to them, extract parts of them, or combine
them with any other name, mark or artwork.
- They are used only in the context of WordCraft, and only to say that the ArtCraft team makes it.
They must never suggest that the ArtCraft Team made, sponsors, endorses, certifies or supports
any other product, service, fork, modified version, plug-in, organization or person.
- Neither the marks nor the ArtCraft name appear in the name, logo, icon, domain, social media
handle, app-store listing, advertising or marketing of anything other than WordCraft.
Forks and modified versions
If you distribute or publish a modified version of WordCraft, or any work derived from it, you must
remove the ArtCraft Marks from it (or replace them with your own) and must not call it ArtCraft or
present it as an ArtCraft product. You may say, in plain text, that your work is based on WordCraft by
the ArtCraft team. A fork kept only to propose changes back to this repository may keep the marks
unchanged.
Everything else
Any use not expressly permitted here needs prior written permission from the ArtCraft Team
(https://getartcraft.com/). The permission ends automatically for anyone who breaks these terms.
All other rights are reserved.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

-4
View File
@@ -1,4 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-10 -19.42 136.34 136.34" role="img" aria-label="ArtCraft">
<title>ArtCraft</title>
<path fill="#0b0b0c" d="M104.28,49.49L81.55,0h-31.23l-3.17,4.76L14.75,53.63,0,75.85l21.55,21.55,63.79-36.94,16.99,37.04,14.01-21.74-12.06-26.27ZM32.89,65.66l32.42-48.87,10.91,23.77-43.32,25.09Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 341 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

-4
View File
@@ -1,4 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-10 -19.42 136.34 136.34" role="img" aria-label="ArtCraft">
<title>ArtCraft</title>
<path fill="#4e7bfb" d="M104.28,49.49L81.55,0h-31.23l-3.17,4.76L14.75,53.63,0,75.85l21.55,21.55,63.79-36.94,16.99,37.04,14.01-21.74-12.06-26.27ZM32.89,65.66l32.42-48.87,10.91,23.77-43.32,25.09Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 341 B

+1 -1
View File
@@ -97,7 +97,7 @@ own (`AGENTS.md`: no Microsoft iconography, ever).
| 2026-10-11 | trivial | Menu buttons (Header, Page Number, Breaks, Wrap Text, table Select/Delete/AutoFit…) grey out and don't open while the command their menu is about is disabled, like the other ribbon buttons (#658) |
| 2026-10-11 | trivial | One drop-down marker everywhere: large ribbon buttons, Equation and the Editing/Reviewing button draw the `dropdown` icon after their label, like split and menu buttons, instead of a text glyph (#659) |
| 2026-10-11 | trivial | Dark theme: Styles, style-set and table-style previews sit on a dimmer page tone; with View › Switch Modes on, the Styles gallery previews the dark page (#663) |
| 2026-10-11 | trivial | Dialog primary buttons, the Discord pill, the table eraser line and the Navigation search highlight take their colours from the theme in both themes (`widgets::primary_button`); a test bans the old fixed values (#656) |
| 2026-10-11 | trivial | Dialog primary buttons, the table eraser line and the Navigation search highlight take their colours from the theme in both themes (`widgets::primary_button`); a test bans the old fixed values (#656) |
| 2026-10-11 | trivial | Dark theme: Share, the avatar initials, the AutoSave knob and keytips use dark `on_accent` text on the light accent (6.2:1, 8.4:1 on hover; white was 2.9:1) (#655) |
| 2026-10-11 | trivial | Text field and combo outlines reach 3:1 against their fill and surroundings in both themes (light #8A8A8A, dark #7A7A7A); a test pins the ratios (#657) |
| 2026-10-11 | trivial | Customize Ribbon (custom tabs and groups, hidden and reordered tabs) and a customizable Quick Access Toolbar with a working … menu (#379, #376) |
@@ -18,10 +18,9 @@
<launchable type="desktop-id">ai.storyteller.wordcraft.desktop</launchable>
<icon type="stock">ai.storyteller.wordcraft</icon>
<!-- Only url types known to appstream 0.15 (Ubuntu 22.04, where CI validates): no vcs-browser. -->
<url type="homepage">https://getartcraft.com/apps/wordcraft</url>
<url type="homepage">https://github.com/storytold/wordcraft</url>
<url type="bugtracker">https://github.com/storytold/wordcraft/issues</url>
<url type="help">https://github.com/storytold/wordcraft</url>
<url type="contact">https://discord.gg/artcraft</url>
<categories>
<category>Office</category>
<category>WordProcessor</category>
+1 -1
View File
@@ -14,7 +14,7 @@ section: graphics
priority: optional
maintainer: ${WORDCRAFT_MAINTAINER}
vendor: Learning Machines LLC
homepage: https://getartcraft.com/apps/wordcraft
homepage: https://github.com/storytold/wordcraft
license: MIT OR Apache-2.0
description: |-
Open-source, native word processor that works the way Word users expect.
+3 -3
View File
@@ -33,9 +33,9 @@
<Icon Id="WordcraftIcon.ico" SourceFile="$(var.IconPath)" />
<Property Id="ARPPRODUCTICON" Value="WordcraftIcon.ico" />
<Property Id="ARPURLINFOABOUT" Value="https://getartcraft.com/apps/wordcraft" />
<Property Id="ARPURLUPDATEINFO" Value="https://getartcraft.com/apps/wordcraft" />
<Property Id="ARPHELPLINK" Value="https://discord.gg/artcraft" />
<Property Id="ARPURLINFOABOUT" Value="https://github.com/storytold/wordcraft" />
<Property Id="ARPURLUPDATEINFO" Value="https://github.com/storytold/wordcraft" />
<Property Id="ARPHELPLINK" Value="https://github.com/storytold/wordcraft/issues" />
<!-- Installer UI (#198): WixUI_Minimal is welcome + license, progress, then a finish page so
people can see the install worked. Its dialogs and bitmaps are WiX's own
Submodule tools/craft-skills added at 26c1c201a7