From eb2786210980844883fca1d7341a012671d4e79e Mon Sep 17 00:00:00 2001 From: Marcos Paulo Date: Sun, 11 Oct 2026 21:15:57 -0300 Subject: [PATCH] chore: debrand ArtCraft and Discord references Remove the Discord button, Help menu links, home-screen community card, About logos 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 --- .debrand | 18 ++ .gitmodules | 3 + AGENTS.md | 2 - ATTRIBUTION.md | 40 ++--- ATTRIBUTION.toml | 160 ++++-------------- NOTICE | 4 - README.md | 93 ++-------- ROADMAP.md | 1 - apps/pdfcraft-cli/src/main.rs | 5 +- assets/app-icon/LICENSE.txt | 2 +- assets/app-icon/README.md | 2 +- crates/automation/src/mcp.rs | 2 +- crates/engine/src/commands.rs | 3 - crates/engine/src/links.rs | 21 +-- crates/ui-egui/src/chrome.rs | 8 +- crates/ui-egui/src/dialogs.rs | 6 - crates/ui-egui/src/home.rs | 20 --- crates/ui-egui/src/i18n/ar.tsv | 5 - crates/ui-egui/src/i18n/bg.tsv | 5 - crates/ui-egui/src/i18n/cs.tsv | 5 - crates/ui-egui/src/i18n/de.tsv | 5 - crates/ui-egui/src/i18n/el.tsv | 5 - crates/ui-egui/src/i18n/es.tsv | 5 - crates/ui-egui/src/i18n/fr.tsv | 5 - crates/ui-egui/src/i18n/hu.tsv | 5 - crates/ui-egui/src/i18n/it.tsv | 5 - crates/ui-egui/src/i18n/ja.tsv | 5 - crates/ui-egui/src/i18n/kk.tsv | 5 - crates/ui-egui/src/i18n/lt.tsv | 5 - crates/ui-egui/src/i18n/pl.tsv | 5 - crates/ui-egui/src/i18n/pt-br.tsv | 5 - crates/ui-egui/src/i18n/ru.tsv | 5 - crates/ui-egui/src/i18n/sl.tsv | 5 - crates/ui-egui/src/i18n/te.tsv | 5 - crates/ui-egui/src/i18n/tr.tsv | 5 - crates/ui-egui/src/i18n/uk.tsv | 5 - crates/ui-egui/src/i18n/zh-hans.tsv | 5 - crates/ui-egui/src/i18n/zh-hant.tsv | 5 - crates/ui-egui/src/widgets.rs | 27 +-- crates/ui-egui/tests/ui.rs | 14 +- crates/ui-egui/tests/ui_group/links.rs | 35 +--- docs/brand/LICENSE-brand.txt | 42 ----- docs/brand/artcraft-logo-white.png | Bin 32161 -> 0 bytes docs/brand/artcraft-logo-white.svg | 7 - docs/brand/artcraft-logo.png | Bin 31302 -> 0 bytes docs/brand/artcraft-logo.svg | 7 - docs/brand/artcraft-mark-black.png | Bin 26793 -> 0 bytes docs/brand/artcraft-mark-black.svg | 4 - docs/brand/artcraft-mark.png | Bin 24715 -> 0 bytes docs/brand/artcraft-mark.svg | 4 - .../ai.storyteller.pdfcraft.metainfo.xml.in | 4 +- packaging/linux/nfpm.yaml | 2 +- packaging/windows/pdfcraft.wxs | 6 +- tools/craft-skills | 1 + xtask/src/assets.rs | 26 +-- xtask/src/screenshots.rs | 9 +- 56 files changed, 119 insertions(+), 564 deletions(-) create mode 100644 .debrand create mode 100644 .gitmodules delete mode 100644 docs/brand/LICENSE-brand.txt delete mode 100644 docs/brand/artcraft-logo-white.png delete mode 100644 docs/brand/artcraft-logo-white.svg delete mode 100644 docs/brand/artcraft-logo.png delete mode 100644 docs/brand/artcraft-logo.svg delete mode 100644 docs/brand/artcraft-mark-black.png delete mode 100644 docs/brand/artcraft-mark-black.svg delete mode 100644 docs/brand/artcraft-mark.png delete mode 100644 docs/brand/artcraft-mark.svg create mode 160000 tools/craft-skills diff --git a/.debrand b/.debrand new file mode 100644 index 0000000..e50074a --- /dev/null +++ b/.debrand @@ -0,0 +1,18 @@ +# 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$ :: \t.*(?:ArtCraft|Discord) +dropline ^ATTRIBUTION\.md$ :: \|\s*`docs/brand/ +sub (?s)\n\*\*One narrow exception: the ArtCraft brand\.\*\*.*?Never add other files under this licence[^\n]*\n => +sub (?s)\nThe ArtCraft name, wordmark and logos in docs/brand/.*?LICENSE-brand\.txt\.\n => +sub drawn in ArtCraft, vectorised => drawn by hand, vectorised +sub drawn in ArtCraft and vectorised => drawn by hand and vectorised +sub drawn by the project owner in ArtCraft; => drawn by the project owner; +sub made in ArtCraft \( => drawn by hand ( +sub , and the ArtCraft mark \(Storyteller trademark from docs/brand/, not covered by this licence\) => +sub \n[ ]*- Community links: Discord button in the title bar, plus Home, About, Help menu, CLI and README\. => +sub https://getartcraft\.com/apps/pdfcraft => https://github.com/storytold/pdfcraft +sub https://discord\.gg/artcraft => https://github.com/storytold/pdfcraft/issues +forbid (?i)artcraft(?! Team and the PdfCraft contributors) +forbid (?i)discord diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..47fd3c6 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "tools/craft-skills"] + path = tools/craft-skills + url = https://git.marcospaulo.dev.br/storytold/craft-skills.git diff --git a/AGENTS.md b/AGENTS.md index 2ac90cf..fcb9194 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -37,8 +37,6 @@ Every asset must be one of: - **Public domain.** - **Contributor-original:** created, photographed or generated by a contributor who owns it and licenses it under the project licence (`MIT OR Apache-2.0`). -**One narrow exception: the ArtCraft brand.** The ArtCraft name, wordmark and logos in `docs/brand/` are trademarks of the ArtCraft Team and are **not** open source (manifest identifier `LicenseRef-Storyteller-Trademark`, terms in `docs/brand/LICENSE-brand.txt`). They may be used only unmodified, only within PdfCraft, and only as `kind = "logo"` entries from that directory, to identify the project. Forks and modified versions must remove them. Never add other files under this licence, and never modify the logos. - Anything else is forbidden, including assets whose licence you cannot prove from the source. Examples: - system fonts (Apple, Microsoft, Google Android system UI fonts that are not openly licensed); - emoji artwork from Apple, Microsoft or Samsung; diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index be77e71..8205772 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -4,7 +4,7 @@ Every asset PdfCraft includes, bundles or uses to build its published material, with its author, source and licence. The policy is in [AGENTS.md](AGENTS.md) §1. The machine-readable list, with SHA-256 hashes, is [ATTRIBUTION.toml](ATTRIBUTION.toml). Licence texts are kept beside the assets and summarised in [NOTICE](NOTICE). -## In this repository (270) +## In this repository (262) | Asset | Title | Author | Licence | Source | Used for | |---|---|---|---|---|---| @@ -223,30 +223,22 @@ Every asset PdfCraft includes, bundles or uses to build its published material, | `vendor/hayro-interpret/assets/FoxitSymbol.pfb` | FoxitSymbol (standard-14 substitute font) | Foxit Software Inc. / PDFium Authors | BSD-3-Clause | https://pdfium.googlesource.com/pdfium (via hayro-interpret 0.7.0 assets/) | Renders non-embedded standard-14 fonts (vendored hayro-interpret) | | `vendor/hayro-interpret/assets/CGATS001Compat-v2-micro.icc` | CGATS001Compat v2 micro ICC profile | Clinton Ingram (saucecontrol/Compact-ICC-Profiles) | CC0-1.0 | https://github.com/saucecontrol/Compact-ICC-Profiles | Default CMYK colour conversion (vendored hayro-interpret) | | `crates/fonts/src/std14.rs` | Standard-14 font advance widths and encodings (as Rust tables) | Adobe (Core14 AFM metrics, PDF specification encodings); tables generated by the PdfCraft contributors | MIT OR Apache-2.0 | ISO 32000-2 Annex D and the Adobe Core14 AFM metrics. Generated by joining the published WinAnsi, Symbol and ZapfDingbats encodings (code to glyph name) with the per-glyph advance widths, then spot-checked against the specification by hand in the tests of crates/fonts/src/std14.rs. | Advance widths for the fourteen standard fonts, which a PDF may name without embedding. Non-visual data, not a typeface: the item AGENTS.md 1.1 permits, held first-party so generated appearance streams and the renderer agree. | -| `docs/brand/artcraft-logo-white.png` | ArtCraft brand: artcraft-logo-white | ArtCraft Team | LicenseRef-Storyteller-Trademark | ArtCraft Team brand assets (provided by the project owner, 2026-10-01; identical copies in storytold/photocraft) | ArtCraft branding next to the community links (About dialog, Help menu, home screen) and in docs. ArtCraft Team trademark, not open source; may be used only unmodified within PdfCraft; forks and modified versions must remove it. | -| `docs/brand/artcraft-logo-white.svg` | ArtCraft brand: artcraft-logo-white | ArtCraft Team | LicenseRef-Storyteller-Trademark | ArtCraft Team brand assets (provided by the project owner, 2026-10-01; identical copies in storytold/photocraft) | ArtCraft branding next to the community links (About dialog, Help menu, home screen) and in docs. ArtCraft Team trademark, not open source; may be used only unmodified within PdfCraft; forks and modified versions must remove it. | -| `docs/brand/artcraft-logo.png` | ArtCraft brand: artcraft-logo | ArtCraft Team | LicenseRef-Storyteller-Trademark | ArtCraft Team brand assets (provided by the project owner, 2026-10-01; identical copies in storytold/photocraft) | ArtCraft branding next to the community links (About dialog, Help menu, home screen) and in docs. ArtCraft Team trademark, not open source; may be used only unmodified within PdfCraft; forks and modified versions must remove it. | -| `docs/brand/artcraft-logo.svg` | ArtCraft brand: artcraft-logo | ArtCraft Team | LicenseRef-Storyteller-Trademark | ArtCraft Team brand assets (provided by the project owner, 2026-10-01; identical copies in storytold/photocraft) | ArtCraft branding next to the community links (About dialog, Help menu, home screen) and in docs. ArtCraft Team trademark, not open source; may be used only unmodified within PdfCraft; forks and modified versions must remove it. | -| `docs/brand/artcraft-mark-black.png` | ArtCraft brand: artcraft-mark-black | ArtCraft Team | LicenseRef-Storyteller-Trademark | ArtCraft Team brand assets (provided by the project owner, 2026-10-01; identical copies in storytold/photocraft) | ArtCraft branding next to the community links (About dialog, Help menu, home screen) and in docs. ArtCraft Team trademark, not open source; may be used only unmodified within PdfCraft; forks and modified versions must remove it. | -| `docs/brand/artcraft-mark-black.svg` | ArtCraft brand: artcraft-mark-black | ArtCraft Team | LicenseRef-Storyteller-Trademark | ArtCraft Team brand assets (provided by the project owner, 2026-10-01; identical copies in storytold/photocraft) | ArtCraft branding next to the community links (About dialog, Help menu, home screen) and in docs. ArtCraft Team trademark, not open source; may be used only unmodified within PdfCraft; forks and modified versions must remove it. | -| `docs/brand/artcraft-mark.png` | ArtCraft brand: artcraft-mark | ArtCraft Team | LicenseRef-Storyteller-Trademark | ArtCraft Team brand assets (provided by the project owner, 2026-10-01; identical copies in storytold/photocraft) | ArtCraft branding next to the community links (About dialog, Help menu, home screen) and in docs. ArtCraft Team trademark, not open source; may be used only unmodified within PdfCraft; forks and modified versions must remove it. | -| `docs/brand/artcraft-mark.svg` | ArtCraft brand: artcraft-mark | ArtCraft Team | LicenseRef-Storyteller-Trademark | ArtCraft Team brand assets (provided by the project owner, 2026-10-01; identical copies in storytold/photocraft) | ArtCraft branding next to the community links (About dialog, Help menu, home screen) and in docs. ArtCraft Team trademark, not open source; may be used only unmodified within PdfCraft; forks and modified versions must remove it. | -| `assets/app-icon/pdfcraft.svg` | PdfCraft app icon (master vector) | PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Master artwork; every other app-icon file is rendered from it (packaging/icons.sh) | -| `assets/app-icon/pdfcraft-small.svg` | PdfCraft app icon (light vector) | PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | README header and assets/app-icon/README.md | -| `assets/app-icon/pdfcraft-1024.png` | PdfCraft app icon, 1024 px on Apple's icon grid | PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Runtime window/Dock icon on macOS (apps/pdfcraft/src/main.rs) | -| `assets/app-icon/pdfcraft.icns` | PdfCraft app icon (macOS .icns) | PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | macOS app bundle icon | -| `assets/app-icon/pdfcraft.ico` | PdfCraft app icon (Windows .ico, 16-256 px) | PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Embedded in pdfcraft.exe by apps/pdfcraft/build.rs (Explorer, taskbar, Start menu, Alt-Tab) | +| `assets/app-icon/pdfcraft.svg` | PdfCraft app icon (master vector) | PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Master artwork; every other app-icon file is rendered from it (packaging/icons.sh) | +| `assets/app-icon/pdfcraft-small.svg` | PdfCraft app icon (light vector) | PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | README header and assets/app-icon/README.md | +| `assets/app-icon/pdfcraft-1024.png` | PdfCraft app icon, 1024 px on Apple's icon grid | PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Runtime window/Dock icon on macOS (apps/pdfcraft/src/main.rs) | +| `assets/app-icon/pdfcraft.icns` | PdfCraft app icon (macOS .icns) | PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | macOS app bundle icon | +| `assets/app-icon/pdfcraft.ico` | PdfCraft app icon (Windows .ico, 16-256 px) | PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Embedded in pdfcraft.exe by apps/pdfcraft/build.rs (Explorer, taskbar, Start menu, Alt-Tab) | | `assets/app-icon/pdfcraft-document.svg` | PdfCraft PDF document icon (master vector) | Lucide Icons and Contributors (document outline); PdfCraft contributors (PDF badge, lettering and composition) | ISC AND (MIT OR Apache-2.0) | https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/file-text.svg); contributor-original composition (assets/app-icon/README.md) | Master artwork for the Windows PDF file type icon; rendered by packaging/icons.sh, without fonts or external images | | `assets/app-icon/pdfcraft-document.ico` | PdfCraft PDF document icon (Windows .ico, 16-256 px) | Lucide Icons and Contributors (document outline); PdfCraft contributors (PDF badge, lettering and composition) | ISC AND (MIT OR Apache-2.0) | https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/file-text.svg); contributor-original composition (assets/app-icon/README.md) | Embedded in pdfcraft.exe as resource 2; the Windows installer uses it for PdfCraft.Document and Applications/pdfcraft.exe PDF file associations | -| `assets/app-icon/hicolor/16x16/apps/ai.storyteller.pdfcraft.png` | PdfCraft app icon, 16 px | PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop) | -| `assets/app-icon/hicolor/24x24/apps/ai.storyteller.pdfcraft.png` | PdfCraft app icon, 24 px | PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop) | -| `assets/app-icon/hicolor/32x32/apps/ai.storyteller.pdfcraft.png` | PdfCraft app icon, 32 px | PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop) | -| `assets/app-icon/hicolor/48x48/apps/ai.storyteller.pdfcraft.png` | PdfCraft app icon, 48 px | PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop) | -| `assets/app-icon/hicolor/64x64/apps/ai.storyteller.pdfcraft.png` | PdfCraft app icon, 64 px | PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop) | -| `assets/app-icon/hicolor/128x128/apps/ai.storyteller.pdfcraft.png` | PdfCraft app icon, 128 px | PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop) | -| `assets/app-icon/hicolor/256x256/apps/ai.storyteller.pdfcraft.png` | PdfCraft app icon, 256 px | PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop); runtime window icon on Windows and Linux (apps/pdfcraft/src/main.rs) | -| `assets/app-icon/hicolor/512x512/apps/ai.storyteller.pdfcraft.png` | PdfCraft app icon, 512 px | PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop) | -| `assets/app-icon/hicolor/scalable/apps/ai.storyteller.pdfcraft.svg` | PdfCraft app icon (Linux scalable) | PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop) | +| `assets/app-icon/hicolor/16x16/apps/ai.storyteller.pdfcraft.png` | PdfCraft app icon, 16 px | PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop) | +| `assets/app-icon/hicolor/24x24/apps/ai.storyteller.pdfcraft.png` | PdfCraft app icon, 24 px | PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop) | +| `assets/app-icon/hicolor/32x32/apps/ai.storyteller.pdfcraft.png` | PdfCraft app icon, 32 px | PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop) | +| `assets/app-icon/hicolor/48x48/apps/ai.storyteller.pdfcraft.png` | PdfCraft app icon, 48 px | PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop) | +| `assets/app-icon/hicolor/64x64/apps/ai.storyteller.pdfcraft.png` | PdfCraft app icon, 64 px | PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop) | +| `assets/app-icon/hicolor/128x128/apps/ai.storyteller.pdfcraft.png` | PdfCraft app icon, 128 px | PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop) | +| `assets/app-icon/hicolor/256x256/apps/ai.storyteller.pdfcraft.png` | PdfCraft app icon, 256 px | PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop); runtime window icon on Windows and Linux (apps/pdfcraft/src/main.rs) | +| `assets/app-icon/hicolor/512x512/apps/ai.storyteller.pdfcraft.png` | PdfCraft app icon, 512 px | PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop) | +| `assets/app-icon/hicolor/scalable/apps/ai.storyteller.pdfcraft.svg` | PdfCraft app icon (Linux scalable) | PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py) | MIT OR Apache-2.0 | Contributor-original (see assets/app-icon/README.md) | Linux hicolor theme icon (packaging/linux/ai.storyteller.pdfcraft.desktop) | | `docs/images/pdfcraft-bookmarks.png` | PdfCraft screenshot: Bookmarks | PdfCraft contributors (generated by `cargo xtask screenshots`) | MIT OR Apache-2.0 | this repository | README: navigation. Shows only PdfCraft UI, Lucide icons and the showcase PDF built from the [[fetched]] OFL fonts | | `docs/images/pdfcraft-dark.png` | PdfCraft screenshot: Dark theme | PdfCraft contributors (generated by `cargo xtask screenshots`) | MIT OR Apache-2.0 | this repository | README: themes. Shows only PdfCraft UI, Lucide icons and the showcase PDF built from the [[fetched]] OFL fonts | | `docs/images/pdfcraft-find.png` | PdfCraft screenshot: Find text | PdfCraft contributors (generated by `cargo xtask screenshots`) | MIT OR Apache-2.0 | this repository | README: search. Shows only PdfCraft UI, Lucide icons and the showcase PDF built from the [[fetched]] OFL fonts | @@ -257,7 +249,7 @@ Every asset PdfCraft includes, bundles or uses to build its published material, | `docs/images/pdfcraft-properties.png` | PdfCraft screenshot: Document properties | PdfCraft contributors (generated by `cargo xtask screenshots`) | MIT OR Apache-2.0 | this repository | README: metadata. Shows only PdfCraft UI, Lucide icons and the showcase PDF built from the [[fetched]] OFL fonts | | `docs/images/pdfcraft-scripts.png` | PdfCraft screenshot: Scripts of the world | PdfCraft contributors (generated by `cargo xtask screenshots`) | MIT OR Apache-2.0 | this repository | README: rendering. Shows only PdfCraft UI, Lucide icons and the showcase PDF built from the [[fetched]] OFL fonts | | `docs/images/pdfcraft-split.png` | PdfCraft screenshot: Split dialog | PdfCraft contributors (generated by `cargo xtask screenshots`) | MIT OR Apache-2.0 | this repository | README: split. Shows only PdfCraft UI, Lucide icons and the showcase PDF built from the [[fetched]] OFL fonts | -| `docs/images/pdfcraft-tools.png` | PdfCraft screenshot: All tools | PdfCraft contributors (generated by `cargo xtask screenshots`) | MIT OR Apache-2.0 | this repository | README: tool catalogue. Shows PdfCraft UI, Lucide icons, the showcase PDF built from the [[fetched]] OFL fonts, and the ArtCraft mark (Storyteller trademark from docs/brand/, not covered by this licence) | +| `docs/images/pdfcraft-tools.png` | PdfCraft screenshot: All tools | PdfCraft contributors (generated by `cargo xtask screenshots`) | MIT OR Apache-2.0 | this repository | README: tool catalogue. Shows PdfCraft UI, Lucide icons, the showcase PDF built from the [[fetched]] OFL fonts | | `docs/images/pdfcraft-twoup.png` | PdfCraft screenshot: Two-up reading | PdfCraft contributors (generated by `cargo xtask screenshots`) | MIT OR Apache-2.0 | this repository | README: layouts. Shows only PdfCraft UI, Lucide icons and the showcase PDF built from the [[fetched]] OFL fonts | | `docs/images/pdfcraft-viewer.png` | PdfCraft screenshot: Viewer with comments | PdfCraft contributors (generated by `cargo xtask screenshots`) | MIT OR Apache-2.0 | this repository | README hero. Shows only PdfCraft UI, Lucide icons and the showcase PDF built from the [[fetched]] OFL fonts | | `assets/icons/pin.svg` | Lucide icon "pin" | Lucide Contributors (portions Cole Bemis, Feather) | ISC | https://github.com/lucide-icons/lucide (npm lucide-static 1.49.0, icons/pin.svg) | UI icon, embedded via crates/ui-egui/src/icon_data.rs | diff --git a/ATTRIBUTION.toml b/ATTRIBUTION.toml index 3b08e84..74c7890 100644 --- a/ATTRIBUTION.toml +++ b/ATTRIBUTION.toml @@ -7,7 +7,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Greek UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "e04ab5246125efae2bad439e62c150fc10649c4b6796b30565615f5bd7509ec6" +sha256 = "9db29707a6c143f7cec5019e9f845f8a807b32445c0b05232c86737d0bb41356" # ATTRIBUTION.toml: one entry per asset (AGENTS.md §1). The source of truth for provenance and licences. # ATTRIBUTION.md is generated from this file: `cargo xtask assets --write`. Checked by `cargo xtask assets` (part of `xtask ci`). @@ -30,7 +30,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Simplified Chinese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "7f600eaa47f23fac4f9f0fece1454e59756c8dc57c7c697502cb02ee21410ac0" +sha256 = "ad81b1adb6e02fc2b59d5685f021374618c992e40dce6d0748a557946626e7f6" [[asset]] path = "crates/ui-egui/src/i18n/zh-hant.tsv" @@ -41,7 +41,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Traditional Chinese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "37733adc79d7d32a057811b4dc5eb31251ef8ec91f1dac430253c69faac1c33f" +sha256 = "f477a3e3f2a668366a340765b6baa9280235a5606539ec2800efcea5795ad4c7" [[asset]] path = "crates/ui-egui/src/i18n/cs.tsv" @@ -52,7 +52,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Czech UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "285b689b5224a66079738ab39d5a27e5f9ba72e1ab42e148f263b7ea320c4729" +sha256 = "5055186aa818b349779fefa1a48a6eb899753620189ddf0ee29af5234e0906f0" [[asset]] path = "crates/ui-egui/src/i18n/pt-br.tsv" @@ -63,7 +63,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Brazilian Portuguese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "e8154a154129ca158396de84d2d432ce1c587477795a6a14985f7834db255744" +sha256 = "4f79e478274833434f8d77dea8333fb75b22558b10b9fb3430658ae6fe87192d" [[asset]] path = "crates/ui-egui/src/i18n/es.tsv" @@ -74,7 +74,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Spanish UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "50d4e66209e8b56707bcd148d4644eb0ad9f49dfc195287cfbd851ffbe5c3830" +sha256 = "b391d974331944cbeb836116d596c301dcc88bf2e9e1788c39964faaebca23c5" [[asset]] path = "crates/ui-egui/src/i18n/fr.tsv" @@ -85,7 +85,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "French UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "13e677d44d5224e60af28fcc89d8f8af552368ca3c11f0a871498c60fefa7ee2" +sha256 = "afb0871d04561da7680ff91f85770571ebd95d890c0580ea9efa28451a5caf37" [[asset]] path = "crates/ui-egui/src/i18n/de.tsv" @@ -96,7 +96,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "German UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "e81112d69acc2e1bbb44c5252f8f323b1d637059b5ac5f4c9fcd3eb985a53442" +sha256 = "23298ef146fe3e91eed3c8229550467467b3b25c0e4248a7c54166d87b166709" [[asset]] path = "crates/ui-egui/src/i18n/te.tsv" @@ -107,7 +107,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Telugu UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "df3d3650af984251372bf22b859ba6aca47f26eeff790e834d57a5a4071a1b48" +sha256 = "e3144ba709f4c8f478b3846c4b1d09cf0bd5aa8f84df98ff1e10016373504154" [[asset]] path = "crates/ui-egui/src/i18n/it.tsv" @@ -118,7 +118,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Italian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "c9e453382d9d5c83f7b0f986befc6113a62b4736a6b94a6462805cead406753b" +sha256 = "290082b865ac6e2733e825539853d209799b5141e9a09df94a37ce24874d50d9" [[asset]] path = "crates/ui-egui/src/i18n/pl.tsv" @@ -129,7 +129,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Polish UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "2a205868b13f719dbc91fdc50f1133f5f317aa2245143bfeaa048190bc9c7d8c" +sha256 = "03a4f4d8d74263b9d6d36c7a8f92a98ec966b8037f00f77cee22c59abb6a1121" [[asset]] path = "crates/ui-egui/src/i18n/ru.tsv" @@ -140,7 +140,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Russian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "3053aff461c289404bf3009c611037870b945692c65ce8d7c14ad26ac477660c" +sha256 = "a55f1573bf0100e5cfe2318af109d8191dba00f22af5ef6e3a470269f7c0e78f" [[asset]] path = "crates/ui-egui/src/i18n/hu.tsv" @@ -151,7 +151,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Hungarian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "882b3937802bbbd5afe0087264ee4118161351e8828cb02b608488ccfe39bfe9" +sha256 = "0faab49f091c4f37668bd5ee8a33a874eb8523e16c2221dd9c6f47256d904da4" [[asset]] path = "crates/ui-egui/src/i18n/bg.tsv" @@ -162,7 +162,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Bulgarian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "8cca054e167995ca6d95bc45fc0f75385a15a78852e4b173bd4c5b7b651c5a9d" +sha256 = "84f4630d196fa4b7c1ddedbfaf777d02335810e1fca2bafa3a1c5aaa2c09a97b" [[asset]] path = "crates/ui-egui/src/i18n/kk.tsv" @@ -173,7 +173,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Kazakh UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "2f4a6429c0c290a53268733dac08da221085992036a4d304d7663d7947d806d3" +sha256 = "ac69380ea7face5aeab3197fb4ee2750ffc488d53d81e3ebc363086bbac105f5" [[asset]] path = "crates/ui-egui/src/i18n/ja.tsv" @@ -184,7 +184,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Japanese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "2792f38b1699269b5886fa99a17c7773c3934df95dc4e2db3ba6a475dd652ba0" +sha256 = "adf8aebea020fbf6be8125ecd242cbf4075293231d96276f47d7f2bfed1c02e7" [[asset]] path = "crates/ui-egui/src/i18n/uk.tsv" @@ -195,7 +195,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Ukrainian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "937ac7eac4230c9a1d26d6bd7ef4f08f8d8c9d391a091682e8758fba3ca9678e" +sha256 = "6443ecd7228ce91e696433653efc4012e19cd00c299d651dc358d5033e22979c" [[asset]] path = "crates/ui-egui/src/i18n/ar.tsv" @@ -206,7 +206,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Arabic UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "7ced08c3485c5eddf92767e6deb009d72351d70cefe60be654cfdac441f40f4b" +sha256 = "5366cf32528dbbb5947d85ed76676bd65b55fa21a6f26c1097be218dfa2b1ae4" [[asset]] path = "crates/ui-egui/src/i18n/tr.tsv" @@ -217,7 +217,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Turkish UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "4e70c6db374db37bf70a17e251675b94128fb11b4d6d20ef669b36fd4ae14ff1" +sha256 = "06da7c3c233e1208eedfe5c2ab1bcbc1a3ca65f136593d968655fab232f70d99" [[asset]] path = "crates/ui-egui/src/i18n/lt.tsv" @@ -228,7 +228,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Lithuanian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "d2e6be7cf74525310a203bed7434e7f69d2288d337ee696de2882df8da31a746" +sha256 = "6fc9578b3f56139faba7bd23c5034739b87999d4b1ce6eb386682331c6482177" [[asset]] path = "assets/icons/accessibility.svg" @@ -2710,98 +2710,10 @@ kind = "font" usage = "Showcase PDF (cargo xtask demo-pdf)" sha256 = "acd98e64795781b2058f07b18475e0ecee2a0fe2b42a49e2f9e37d0d6bf66ce6" -[[asset]] -path = "docs/brand/artcraft-logo-white.png" -title = "ArtCraft brand: artcraft-logo-white" -author = "ArtCraft Team" -source = "ArtCraft Team brand assets (provided by the project owner, 2026-10-01; identical copies in storytold/photocraft)" -licence = "LicenseRef-Storyteller-Trademark" -licence_file = "docs/brand/LICENSE-brand.txt" -kind = "logo" -usage = "ArtCraft branding next to the community links (About dialog, Help menu, home screen) and in docs. ArtCraft Team trademark, not open source; may be used only unmodified within PdfCraft; forks and modified versions must remove it." -sha256 = "8b86aeb06a12a90ba77a60e0d90329272310e244ee5c1f9b161b391280ca79d8" - -[[asset]] -path = "docs/brand/artcraft-logo-white.svg" -title = "ArtCraft brand: artcraft-logo-white" -author = "ArtCraft Team" -source = "ArtCraft Team brand assets (provided by the project owner, 2026-10-01; identical copies in storytold/photocraft)" -licence = "LicenseRef-Storyteller-Trademark" -licence_file = "docs/brand/LICENSE-brand.txt" -kind = "logo" -usage = "ArtCraft branding next to the community links (About dialog, Help menu, home screen) and in docs. ArtCraft Team trademark, not open source; may be used only unmodified within PdfCraft; forks and modified versions must remove it." -sha256 = "a3e03dc49f9ad4225b8517d5424309c8d1c864d3996d862190d9cc797d5af427" - -[[asset]] -path = "docs/brand/artcraft-logo.png" -title = "ArtCraft brand: artcraft-logo" -author = "ArtCraft Team" -source = "ArtCraft Team brand assets (provided by the project owner, 2026-10-01; identical copies in storytold/photocraft)" -licence = "LicenseRef-Storyteller-Trademark" -licence_file = "docs/brand/LICENSE-brand.txt" -kind = "logo" -usage = "ArtCraft branding next to the community links (About dialog, Help menu, home screen) and in docs. ArtCraft Team trademark, not open source; may be used only unmodified within PdfCraft; forks and modified versions must remove it." -sha256 = "08fc6d9d3717e8f13417bac6f9025b50e11d1e0b32e9e000883d2fe0c4a0c67b" - -[[asset]] -path = "docs/brand/artcraft-logo.svg" -title = "ArtCraft brand: artcraft-logo" -author = "ArtCraft Team" -source = "ArtCraft Team brand assets (provided by the project owner, 2026-10-01; identical copies in storytold/photocraft)" -licence = "LicenseRef-Storyteller-Trademark" -licence_file = "docs/brand/LICENSE-brand.txt" -kind = "logo" -usage = "ArtCraft branding next to the community links (About dialog, Help menu, home screen) and in docs. ArtCraft Team trademark, not open source; may be used only unmodified within PdfCraft; forks and modified versions must remove it." -sha256 = "3188971e1affdf4f6be4fa65f715376a7a305e6aa741ec78b0296c8f934eff08" - -[[asset]] -path = "docs/brand/artcraft-mark-black.png" -title = "ArtCraft brand: artcraft-mark-black" -author = "ArtCraft Team" -source = "ArtCraft Team brand assets (provided by the project owner, 2026-10-01; identical copies in storytold/photocraft)" -licence = "LicenseRef-Storyteller-Trademark" -licence_file = "docs/brand/LICENSE-brand.txt" -kind = "logo" -usage = "ArtCraft branding next to the community links (About dialog, Help menu, home screen) and in docs. ArtCraft Team trademark, not open source; may be used only unmodified within PdfCraft; forks and modified versions must remove it." -sha256 = "5954cc0306e1b9d7beb47097e2e842157113a39d9aba078b57304902687936a9" - -[[asset]] -path = "docs/brand/artcraft-mark-black.svg" -title = "ArtCraft brand: artcraft-mark-black" -author = "ArtCraft Team" -source = "ArtCraft Team brand assets (provided by the project owner, 2026-10-01; identical copies in storytold/photocraft)" -licence = "LicenseRef-Storyteller-Trademark" -licence_file = "docs/brand/LICENSE-brand.txt" -kind = "logo" -usage = "ArtCraft branding next to the community links (About dialog, Help menu, home screen) and in docs. ArtCraft Team trademark, not open source; may be used only unmodified within PdfCraft; forks and modified versions must remove it." -sha256 = "570adcb4f7ba8ca0647f97074476bab81d3272988f1cdee52efa21bf026036a4" - -[[asset]] -path = "docs/brand/artcraft-mark.png" -title = "ArtCraft brand: artcraft-mark" -author = "ArtCraft Team" -source = "ArtCraft Team brand assets (provided by the project owner, 2026-10-01; identical copies in storytold/photocraft)" -licence = "LicenseRef-Storyteller-Trademark" -licence_file = "docs/brand/LICENSE-brand.txt" -kind = "logo" -usage = "ArtCraft branding next to the community links (About dialog, Help menu, home screen) and in docs. ArtCraft Team trademark, not open source; may be used only unmodified within PdfCraft; forks and modified versions must remove it." -sha256 = "9d372157a949c147318561e629b11561c28b7cbc14c84b516a3fe6e84d8fbbad" - -[[asset]] -path = "docs/brand/artcraft-mark.svg" -title = "ArtCraft brand: artcraft-mark" -author = "ArtCraft Team" -source = "ArtCraft Team brand assets (provided by the project owner, 2026-10-01; identical copies in storytold/photocraft)" -licence = "LicenseRef-Storyteller-Trademark" -licence_file = "docs/brand/LICENSE-brand.txt" -kind = "logo" -usage = "ArtCraft branding next to the community links (About dialog, Help menu, home screen) and in docs. ArtCraft Team trademark, not open source; may be used only unmodified within PdfCraft; forks and modified versions must remove it." -sha256 = "f87af81b6fa411da8820eed2bfdcc54c0ee9cd453b4e868c64f56c69db142d0e" - [[asset]] path = "assets/app-icon/pdfcraft.svg" title = "PdfCraft app icon (master vector)" -author = "PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py)" +author = "PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py)" source = "Contributor-original (see assets/app-icon/README.md)" licence = "MIT OR Apache-2.0" licence_file = "assets/app-icon/LICENSE.txt" @@ -2812,7 +2724,7 @@ sha256 = "52b384a10a2a7fdd3145d9822972cfd568ef0cb7312549bd4399addd89d45a6d" [[asset]] path = "assets/app-icon/pdfcraft-small.svg" title = "PdfCraft app icon (light vector)" -author = "PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py)" +author = "PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py)" source = "Contributor-original (see assets/app-icon/README.md)" licence = "MIT OR Apache-2.0" licence_file = "assets/app-icon/LICENSE.txt" @@ -2823,7 +2735,7 @@ sha256 = "b036304c11ef5dcad36636d06ca0bf331b51e47650d25d3c916a0e1eabf544c7" [[asset]] path = "assets/app-icon/pdfcraft-1024.png" title = "PdfCraft app icon, 1024 px on Apple's icon grid" -author = "PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py)" +author = "PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py)" source = "Contributor-original (see assets/app-icon/README.md)" licence = "MIT OR Apache-2.0" licence_file = "assets/app-icon/LICENSE.txt" @@ -2834,7 +2746,7 @@ sha256 = "da577d3f21fbcf5c739067787a9e683be2b064d76813b5d5fec9074a7a106538" [[asset]] path = "assets/app-icon/pdfcraft.icns" title = "PdfCraft app icon (macOS .icns)" -author = "PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py)" +author = "PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py)" source = "Contributor-original (see assets/app-icon/README.md)" licence = "MIT OR Apache-2.0" licence_file = "assets/app-icon/LICENSE.txt" @@ -2845,7 +2757,7 @@ sha256 = "2425148222873de241d267aba667a8b234ecdd0149f2ca8bb6e79443b743b1e8" [[asset]] path = "assets/app-icon/pdfcraft.ico" title = "PdfCraft app icon (Windows .ico, 16-256 px)" -author = "PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py)" +author = "PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py)" source = "Contributor-original (see assets/app-icon/README.md)" licence = "MIT OR Apache-2.0" licence_file = "assets/app-icon/LICENSE.txt" @@ -2878,7 +2790,7 @@ sha256 = "ba3f9128b368fc6d17d376cf62dbdbc22455451c5c8c4779210d7a2a7409b9e6" [[asset]] path = "assets/app-icon/hicolor/16x16/apps/ai.storyteller.pdfcraft.png" title = "PdfCraft app icon, 16 px" -author = "PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py)" +author = "PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py)" source = "Contributor-original (see assets/app-icon/README.md)" licence = "MIT OR Apache-2.0" licence_file = "assets/app-icon/LICENSE.txt" @@ -2889,7 +2801,7 @@ sha256 = "9b77095cbe75dcba6b74a1fdcd4064812850efaf7a12edebefc9ded5eabb49da" [[asset]] path = "assets/app-icon/hicolor/24x24/apps/ai.storyteller.pdfcraft.png" title = "PdfCraft app icon, 24 px" -author = "PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py)" +author = "PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py)" source = "Contributor-original (see assets/app-icon/README.md)" licence = "MIT OR Apache-2.0" licence_file = "assets/app-icon/LICENSE.txt" @@ -2900,7 +2812,7 @@ sha256 = "a4cd466687f6c5cb59eef3fc564bdba1c8f0d9e324754eeebab82f18823efae7" [[asset]] path = "assets/app-icon/hicolor/32x32/apps/ai.storyteller.pdfcraft.png" title = "PdfCraft app icon, 32 px" -author = "PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py)" +author = "PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py)" source = "Contributor-original (see assets/app-icon/README.md)" licence = "MIT OR Apache-2.0" licence_file = "assets/app-icon/LICENSE.txt" @@ -2911,7 +2823,7 @@ sha256 = "e22279013a5ed5c02571e1e4e9bc4cef9aa0847fcb733a285b2916fabd16bf78" [[asset]] path = "assets/app-icon/hicolor/48x48/apps/ai.storyteller.pdfcraft.png" title = "PdfCraft app icon, 48 px" -author = "PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py)" +author = "PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py)" source = "Contributor-original (see assets/app-icon/README.md)" licence = "MIT OR Apache-2.0" licence_file = "assets/app-icon/LICENSE.txt" @@ -2922,7 +2834,7 @@ sha256 = "55daf2d5575f6c4e4c4975c9f1c74231178f1801963a8b19f68dfa9bc50cb22f" [[asset]] path = "assets/app-icon/hicolor/64x64/apps/ai.storyteller.pdfcraft.png" title = "PdfCraft app icon, 64 px" -author = "PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py)" +author = "PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py)" source = "Contributor-original (see assets/app-icon/README.md)" licence = "MIT OR Apache-2.0" licence_file = "assets/app-icon/LICENSE.txt" @@ -2933,7 +2845,7 @@ sha256 = "2975c200f341e247b5fa18f568fb27d390e3fa01e9b2ad37acb48d0e1cc8a124" [[asset]] path = "assets/app-icon/hicolor/128x128/apps/ai.storyteller.pdfcraft.png" title = "PdfCraft app icon, 128 px" -author = "PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py)" +author = "PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py)" source = "Contributor-original (see assets/app-icon/README.md)" licence = "MIT OR Apache-2.0" licence_file = "assets/app-icon/LICENSE.txt" @@ -2944,7 +2856,7 @@ sha256 = "6ef927ca252b40bc9b5d8843d84137334362f8aa1acbb1bf8c15a02affd25b2b" [[asset]] path = "assets/app-icon/hicolor/256x256/apps/ai.storyteller.pdfcraft.png" title = "PdfCraft app icon, 256 px" -author = "PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py)" +author = "PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py)" source = "Contributor-original (see assets/app-icon/README.md)" licence = "MIT OR Apache-2.0" licence_file = "assets/app-icon/LICENSE.txt" @@ -2955,7 +2867,7 @@ sha256 = "cde7ee8c5ee38f9fc40a429fd9e6d99a035bcd321701fce331bb13bac126614d" [[asset]] path = "assets/app-icon/hicolor/512x512/apps/ai.storyteller.pdfcraft.png" title = "PdfCraft app icon, 512 px" -author = "PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py)" +author = "PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py)" source = "Contributor-original (see assets/app-icon/README.md)" licence = "MIT OR Apache-2.0" licence_file = "assets/app-icon/LICENSE.txt" @@ -2966,7 +2878,7 @@ sha256 = "5ede733e93b96f4eb8d94299232cf2f9605fa19b0d913f95fe9828c316a2d066" [[asset]] path = "assets/app-icon/hicolor/scalable/apps/ai.storyteller.pdfcraft.svg" title = "PdfCraft app icon (Linux scalable)" -author = "PdfCraft contributors (drawn by the project owner in ArtCraft; vectorised with craftrules vectorize_tile.py)" +author = "PdfCraft contributors (drawn by the project owner; vectorised with craftrules vectorize_tile.py)" source = "Contributor-original (see assets/app-icon/README.md)" licence = "MIT OR Apache-2.0" licence_file = "assets/app-icon/LICENSE.txt" @@ -3092,7 +3004,7 @@ source = "this repository" licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "image" -usage = "README: tool catalogue. Shows PdfCraft UI, Lucide icons, the showcase PDF built from the [[fetched]] OFL fonts, and the ArtCraft mark (Storyteller trademark from docs/brand/, not covered by this licence)" +usage = "README: tool catalogue. Shows PdfCraft UI, Lucide icons, the showcase PDF built from the [[fetched]] OFL fonts" sha256 = "61731a921902e285d40826d401f1ef25624dabb8c8ac1f8f0c09c1292a17ee1a" [[asset]] @@ -3351,4 +3263,4 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Slovene UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "6c01a439220415b83acab79c014286e5871ba7946a9c3b9a4776be797d55a086" +sha256 = "71ddf87c608942166baf11cea1e5a49447334eda1c9d9b7eafa2fddb26115c3a" diff --git a/NOTICE b/NOTICE index 8cacb0b..40bd45f 100644 --- a/NOTICE +++ b/NOTICE @@ -3,10 +3,6 @@ Copyright (c) 2026 ArtCraft Team and the PdfCraft 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 diff --git a/README.md b/README.md index b20179f..30ffe21 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,3 @@ -

- - - - ArtCraft - - -

- -

PdfCraft

@@ -23,16 +13,6 @@ No account, no telemetry

-

- Join the ArtCraft community on Discord -

- -

- PdfCraft on getartcraft.com · - ArtCraft · - All Crafting Apps -

-

@@ -41,10 +21,6 @@ The PdfCraft Showcase, a 13-page specimen PDF, open with the All tools panel and threaded comments.

-> [!NOTE] -> **ArtCraft is a community of artists from all walks of life.** Digital, generative, music, -> games — if you make things, you're one of us. **[Come say hi on Discord](https://discord.gg/artcraft).** -

Highlights · Read · @@ -64,16 +40,6 @@ --- -## Community - -PdfCraft is part of [ArtCraft](https://getartcraft.com). Come say hello, get help and follow development: - -- **Discord: [discord.gg/artcraft](https://discord.gg/artcraft)**. This is the fastest way to get help and share feedback. The app has a Discord button in its title bar. -- **Web page:** [getartcraft.com/apps/pdfcraft](https://getartcraft.com/apps/pdfcraft) -- **Source:** [github.com/storytold/pdfcraft](https://github.com/storytold/pdfcraft) - -The ArtCraft name and logos in `docs/brand/` are trademarks of the ArtCraft Team and are not open source. They may be used only unmodified, and only as part of PdfCraft (see `docs/brand/LICENSE-brand.txt`). Forks and modified versions must remove them. - ## Highlights @@ -432,9 +398,7 @@ The summary is in **[ROADMAP.md](ROADMAP.md)**; the full assessment by dimension ## Downloads -**New to PdfCraft?** Download it from the [PdfCraft page on getartcraft.com](https://getartcraft.com/apps/pdfcraft). That's the easiest way to install it. - -**Want a specific build or format?** On GitHub, the [latest release](https://github.com/storytold/pdfcraft/releases/latest) has every build listed below, and [all releases](https://github.com/storytold/pdfcraft/releases) has earlier versions and their notes. `` in the file names is the version number, and `SHA256SUMS.txt` lists a checksum for every file. +On GitHub, the [latest release](https://github.com/storytold/pdfcraft/releases/latest) has every build listed below, and [all releases](https://github.com/storytold/pdfcraft/releases) has earlier versions and their notes. `` in the file names is the version number, and `SHA256SUMS.txt` lists a checksum for every file. ### Windows @@ -502,42 +466,18 @@ Every other Linux build needs glibc 2.35 or newer (Ubuntu 22.04+, Debian 12+, Fe ## The Crafting Apps PdfCraft 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 | -|:-:|---|---|---|---| -| | **PhotoCraft** | Image editing: layers, masks, type and real PSD files | [GitHub](https://github.com/storytold/photocraft) | [Website](https://getartcraft.com/apps/photocraft) | -| | **VectorCraft** | Vector illustration | [GitHub](https://github.com/storytold/vectorcraft) | [Website](https://getartcraft.com/apps/vectorcraft) | -| | **FilmCraft** | Video editing, color and sound | [GitHub](https://github.com/storytold/filmcraft) | [Website](https://getartcraft.com/apps/filmcraft) | -| | **LightCraft** | Photo library and raw development | [GitHub](https://github.com/storytold/lightcraft) | [Website](https://getartcraft.com/apps/lightcraft) | -| | **PdfCraft** | **Reading, organizing and protecting PDFs · you are here** | [GitHub](https://github.com/storytold/pdfcraft) | [Website](https://getartcraft.com/apps/pdfcraft) | -| | **EffectCraft** | Motion graphics and visual effects | [GitHub](https://github.com/storytold/effectcraft) | [Website](https://getartcraft.com/apps/effectcraft) | -| | **DesignCraft** | Page layout and publishing | [GitHub](https://github.com/storytold/designcraft) | [Website](https://getartcraft.com/apps/designcraft) | - -And [**ArtCraft**](https://getartcraft.com/) itself, our AI image and video studio for artists who want real control. - -
- -

- Join the ArtCraft community on Discord -

- -

Come make things with us

- -

- 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. -

- -

- discord.gg/artcraft · - getartcraft.com · - The Crafting Apps · - PdfCraft -

+| | App | What it's for | Code | +|:-:|---|---|---| +| | **PhotoCraft** | Image editing: layers, masks, type and real PSD files | [GitHub](https://github.com/storytold/photocraft) | +| | **VectorCraft** | Vector illustration | [GitHub](https://github.com/storytold/vectorcraft) | +| | **FilmCraft** | Video editing, color and sound | [GitHub](https://github.com/storytold/filmcraft) | +| | **LightCraft** | Photo library and raw development | [GitHub](https://github.com/storytold/lightcraft) | +| | **PdfCraft** | **Reading, organizing and protecting PDFs · you are here** | [GitHub](https://github.com/storytold/pdfcraft) | +| | **EffectCraft** | Motion graphics and visual effects | [GitHub](https://github.com/storytold/effectcraft) | +| | **DesignCraft** | Page layout and publishing | [GitHub](https://github.com/storytold/designcraft) | --- @@ -551,18 +491,7 @@ with its author, source and license in [ATTRIBUTION.md](ATTRIBUTION.md). Release the Japanese fonts of [craft-fonts](https://github.com/storytold/craft-fonts/blob/main/ATTRIBUTION.md) (SIL Open Font License 1.1). -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 PdfCraft, under [`docs/brand/LICENSE-brand.txt`](docs/brand/LICENSE-brand.txt). -Forks and modified versions must remove them. - 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. PdfCraft is an independent, open-source project and is not affiliated with, sponsored by or endorsed by Adobe Inc.; these names are used only to describe the workflows it is compatible with. - -

- ArtCraft
- Made by the ArtCraft team and community. -

- Tools and Inspector panels can be dragged into tab groups, split beside the PDF, or floated within the app window. Read and full-screen modes keep their existing focused document view. Drag a panel header to a target edge or another header. Its context menu offers Float panel, Move to group, and Close panel. Existing panel toggles reopen panels at their saved location; Reset Panel Layout restores the app layout. Floating panels remain inside the current app window. Advanced `ui.dock` operations use the same validated transaction as pointer gestures: diff --git a/ROADMAP.md b/ROADMAP.md index 44a2660..eef79b2 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -361,7 +361,6 @@ Newest first: the date, what moved, and the new overall estimate. - Bookmark editing and page numbering (Number pages), with undo, agent tools and UI. - A render watchdog: pathological pages are skipped after 20 s instead of spinning forever. - The agent control channel no longer reports success when the window is hidden. - - Community links: Discord button in the title bar, plus Home, About, Help menu, CLI and README. - Overall ≈ 10%. - **2026-10-01 (session 6):** - UI control channel: agents can inspect the widget tree, click, type, press keys, run commands and take screenshots of the running app. Off unless the app is started with `--control`; loopback only, token-authenticated. diff --git a/apps/pdfcraft-cli/src/main.rs b/apps/pdfcraft-cli/src/main.rs index b33cd89..5ecd0de 100644 --- a/apps/pdfcraft-cli/src/main.rs +++ b/apps/pdfcraft-cli/src/main.rs @@ -63,8 +63,7 @@ pdfcraft-cli run --script steps.json [--root DIR] [{\"tool\": \"doc_open mcp_usage!(), "\ pdfcraft-cli ui --control FILE [key=value …] [--out shot.png] - drive a running app started with --control FILE -help and feedback: https://discord.gg/artcraft" + drive a running app started with --control FILE" ); fn main() -> ExitCode { @@ -142,8 +141,6 @@ fn stdout_line(line: std::fmt::Arguments<'_>) -> Result<(), CliError> { fn version() -> Result<(), CliError> { stdout_line(format_args!("pdfcraft-cli {}", env!("CARGO_PKG_VERSION")))?; - stdout_line(format_args!("Discord: {} (help and feedback)", pdfcraft_engine::links::DISCORD))?; - stdout_line(format_args!("Web: {}", pdfcraft_engine::links::APP_PAGE))?; stdout_line(format_args!("Source: {}", pdfcraft_engine::links::GITHUB))?; Ok(()) } diff --git a/assets/app-icon/LICENSE.txt b/assets/app-icon/LICENSE.txt index 1480a31..71ed09b 100644 --- a/assets/app-icon/LICENSE.txt +++ b/assets/app-icon/LICENSE.txt @@ -1,7 +1,7 @@ PdfCraft app icon (pdfcraft.svg, pdfcraft-small.svg and every file derived from them in this directory: pdfcraft-1024.png, pdfcraft.icns, pdfcraft.ico, hicolor/). -Original artwork made for this project by the project owner, drawn in ArtCraft and vectorised for +Original artwork made for this project by the project owner, drawn by hand and vectorised for PdfCraft (no third-party material). Licensed like the rest of PdfCraft, under either of * Apache License, Version 2.0 (https://www.apache.org/licenses/LICENSE-2.0) diff --git a/assets/app-icon/README.md b/assets/app-icon/README.md index 10fb2d4..f0c84d5 100644 --- a/assets/app-icon/README.md +++ b/assets/app-icon/README.md @@ -19,7 +19,7 @@ a full-bleed colour field, no frame or roundel, the animal looking at the viewer icons use the full-bleed tile. macOS icons put it on Apple's grid (an 824 px body centred on a transparent 1024 px canvas). -**Provenance:** the project owner's original drawing, made in ArtCraft (2880 px, keyed to the palette), then +**Provenance:** the project owner's original drawing, drawn by hand (2880 px, keyed to the palette), then vectorised with craftrules `assets/logo-options/_tools/vectorize_tile.py` (potrace; no filtering or warping). The source drawing is kept in craftrules at `assets/app-icons/pdfcraft/source.png`, not here. Licence: [LICENSE.txt](LICENSE.txt) (`MIT OR Apache-2.0`, like the repo). diff --git a/crates/automation/src/mcp.rs b/crates/automation/src/mcp.rs index d114ea6..95bd644 100644 --- a/crates/automation/src/mcp.rs +++ b/crates/automation/src/mcp.rs @@ -131,7 +131,7 @@ impl McpServer { Ok(json!({ "protocolVersion": version, "capabilities": { "tools": { "listChanged": false }, "resources": { "listChanged": false, "subscribe": false } }, - "serverInfo": { "name": "pdfcraft", "title": "PdfCraft", "version": env!("CARGO_PKG_VERSION"), "websiteUrl": pdfcraft_engine::links::APP_PAGE }, + "serverInfo": { "name": "pdfcraft", "title": "PdfCraft", "version": env!("CARGO_PKG_VERSION"), "websiteUrl": pdfcraft_engine::links::GITHUB }, "instructions": if self.compact { format!("{INSTRUCTIONS}{COMPACT_INSTRUCTIONS}") } else { INSTRUCTIONS.to_string() }, })) } diff --git a/crates/engine/src/commands.rs b/crates/engine/src/commands.rs index 740aab1..3eb7956 100644 --- a/crates/engine/src/commands.rs +++ b/crates/engine/src/commands.rs @@ -356,10 +356,7 @@ pub const COMMANDS: &[CommandSpec] = &[ c("page.split", "Split document…", PAGES, None, Assembly, "scissors"), c("page.number", "Number pages…", PAGES, None, Assembly, "hash"), c("help.shortcuts", "Keyboard shortcuts", HELP, None, Nothing, "circle-help"), - c("help.discord", "Join the ArtCraft Discord", HELP, None, Nothing, "messages-square"), - c("help.app_page", "PdfCraft web page", HELP, None, Nothing, "globe"), c("help.github", "PdfCraft on GitHub", HELP, None, Nothing, "code-xml"), - c("help.website", "ArtCraft website", HELP, None, Nothing, "external-link"), c("help.check_updates", "Check for updates…", HELP, None, Nothing, "cloud"), c("help.about", "About PdfCraft", HELP, None, Nothing, "info"), ]; diff --git a/crates/engine/src/links.rs b/crates/engine/src/links.rs index 47abdf4..d79e9b0 100644 --- a/crates/engine/src/links.rs +++ b/crates/engine/src/links.rs @@ -1,15 +1,12 @@ -//! Where PdfCraft and the ArtCraft community live on the web. One table, so the Help menu, the -//! About dialog, the home screen, the CLI and the README agree. +//! Where PdfCraft lives on the web. One table, so the Help menu, the About dialog, the home +//! screen, the CLI and the README agree. use icu_properties::props::Script; use std::path::{Path, PathBuf}; -/// The app's name in ArtCraft URLs (`getartcraft.com/apps/{APP}`, `github.com/storytold/{APP}`). +/// The app's name in its GitHub URL (`github.com/storytold/{APP}`). pub const APP: &str = "pdfcraft"; -pub const DISCORD: &str = "https://discord.gg/artcraft"; -pub const WEBSITE: &str = "https://getartcraft.com"; -pub const APP_PAGE: &str = "https://getartcraft.com/apps/pdfcraft"; pub const GITHUB: &str = "https://github.com/storytold/pdfcraft"; /// A link and the registry command that opens it. @@ -22,13 +19,8 @@ pub struct Link { pub icon: &'static str, } -/// In the order they are shown. Discord comes first: it is where people get help fastest. -pub const LINKS: &[Link] = &[ - Link { command: "help.discord", label: "Join the ArtCraft Discord", url: DISCORD, icon: "messages-square" }, - Link { command: "help.app_page", label: "PdfCraft web page", url: APP_PAGE, icon: "globe" }, - Link { command: "help.github", label: "PdfCraft on GitHub", url: GITHUB, icon: "code-xml" }, - Link { command: "help.website", label: "ArtCraft website", url: WEBSITE, icon: "external-link" }, -]; +/// In the order they are shown. +pub const LINKS: &[Link] = &[Link { command: "help.github", label: "PdfCraft on GitHub", url: GITHUB, icon: "code-xml" }]; pub fn for_command(id: &str) -> Option<&'static Link> { LINKS.iter().find(|l| l.command == id) @@ -487,8 +479,7 @@ mod tests { } #[test] - fn urls_follow_the_artcraft_scheme() { - assert_eq!(super::APP_PAGE, format!("{}/apps/{}", super::WEBSITE, super::APP)); + fn urls_follow_the_github_scheme() { assert_eq!(super::GITHUB, format!("https://github.com/storytold/{}", super::APP)); for l in super::LINKS { assert!(l.url.starts_with("https://"), "{}", l.url); diff --git a/crates/ui-egui/src/chrome.rs b/crates/ui-egui/src/chrome.rs index 1f2d237..eac76b0 100644 --- a/crates/ui-egui/src/chrome.rs +++ b/crates/ui-egui/src/chrome.rs @@ -52,8 +52,8 @@ pub fn tab_strip(app: &mut PdfCraftApp, ui: &mut egui::Ui) { app.active = None; app.combine_tab.focused = false; } - // Keep the two icon buttons, Discord's text/padding and three gaps outside the scrolling tabs. - let controls_width = ui.fonts_mut(|f| f.layout_no_wrap("Discord".into(), theme::medium(13.0), t.text).size().x) + 2.0 * button + 50.0; + // Keep the two icon buttons and their gaps outside the scrolling tabs. + let controls_width = 2.0 * button + 30.0; // Open stays in sight after the tabs: its icon, text and padding, and the gaps around it. let open_width = ui.fonts_mut(|f| f.layout_no_wrap(tl!("Open").into(), theme::medium(13.0), t.text).size().x) + 38.0 + 12.0; let mut tabs_width = (ui.available_width() - controls_width - open_width).max(0.0); @@ -213,10 +213,6 @@ pub fn tab_strip(app: &mut PdfCraftApp, ui: &mut egui::Ui) { if icons::button(ui, "circle-help", button, false, tl!("Keyboard shortcuts")).clicked() { app.dialog = Some(Dialog::Shortcuts); } - // One click to the community, from anywhere in the app. - if widgets::ghost_button_sized(ui, "messages-square", "Discord", tab_h).on_hover_text(pdfcraft_engine::links::DISCORD).clicked() { - app.execute("help.discord"); - } }); }); }); diff --git a/crates/ui-egui/src/dialogs.rs b/crates/ui-egui/src/dialogs.rs index 499d0e4..fcffd8d 100644 --- a/crates/ui-egui/src/dialogs.rs +++ b/crates/ui-egui/src/dialogs.rs @@ -1095,7 +1095,6 @@ fn dialogs(app: &mut PdfCraftApp, ctx: &egui::Context) { 2 => crate::credits::models_ui(ui), _ => { ui.horizontal(|ui| { - widgets::artcraft_mark(ui, 40.0); ui.vertical(|ui| { ui.label(egui::RichText::new("PdfCraft").font(theme::semibold(20.0))); ui.label(crate::i18n::fmt(tl!("Version {v}"), &[("v", env!("CARGO_PKG_VERSION"))])); @@ -1111,11 +1110,6 @@ fn dialogs(app: &mut PdfCraftApp, ctx: &egui::Context) { .small(), ); ui.add_space(12.0); - ui.horizontal(|ui| { - ui.label(egui::RichText::new(tl!("Part of")).color(t.text_muted)); - widgets::artcraft_logo(ui, 16.0); - }); - ui.add_space(6.0); if let Some(cmd) = widgets::community_links(ui) { link_command = Some(cmd); } diff --git a/crates/ui-egui/src/home.rs b/crates/ui-egui/src/home.rs index 3e70f34..2229241 100644 --- a/crates/ui-egui/src/home.rs +++ b/crates/ui-egui/src/home.rs @@ -28,26 +28,6 @@ pub fn show(app: &mut PdfCraftApp, ui: &mut egui::Ui) { .color(t.text_muted) .font(theme::regular(14.0)), ); - ui.add_space(14.0); - egui::Frame::NONE - .fill(t.card) - .stroke(Stroke::new(1.0, t.border)) - .corner_radius(CornerRadius::same(12)) - .inner_margin(egui::Margin::same(14)) - .show(ui, |ui| { - ui.set_width(ui.available_width()); - ui.horizontal(|ui| { - widgets::artcraft_mark(ui, 28.0); - ui.vertical(|ui| { - ui.label(egui::RichText::new(tl!("Join the ArtCraft community")).font(theme::semibold(15.0))); - ui.label(egui::RichText::new(tl!("Get help, share feedback and follow development on Discord.")).color(t.text_muted)); - }); - }); - ui.add_space(8.0); - if let Some(cmd) = widgets::community_links(ui) { - app.execute(cmd); - } - }); ui.add_space(22.0); egui::Frame::NONE diff --git a/crates/ui-egui/src/i18n/ar.tsv b/crates/ui-egui/src/i18n/ar.tsv index 8163ee3..9df73e5 100644 --- a/crates/ui-egui/src/i18n/ar.tsv +++ b/crates/ui-egui/src/i18n/ar.tsv @@ -93,7 +93,6 @@ Side panels اللوحات الجانبية Enable Acrobat JavaScript تفعيل Acrobat JavaScript OK موافق - Join our Discord انضم إلى خادمنا على Discord Close إغلاق Next / previous match التطابق التالي / السابق Copy selected text نسخ النص المحدد @@ -161,8 +160,6 @@ Current page — type a page number or label (such as iv) and press Enter الصفحة الحالية — اكتب رقم صفحة أو تسميتها (مثل iv) ثم اضغط Enter Welcome to PdfCraft مرحبًا بك في PdfCraft An open-source PDF workbench — local, private, and scriptable. منضدة عمل مفتوحة المصدر لملفات PDF — محلية وخاصة وقابلة للبرمجة. - Join the ArtCraft community انضم إلى مجتمع ArtCraft - Get help, share feedback and follow development on Discord. احصل على المساعدة وشارك ملاحظاتك وتابع التطوير على Discord. Recommended tools أدوات مقترحة Use now استخدم الآن Open file فتح ملف @@ -307,10 +304,8 @@ Split document… تقسيم المستند… Number pages… ترقيم الصفحات… Keyboard shortcuts اختصارات لوحة المفاتيح - Join the ArtCraft Discord انضم إلى خادم ArtCraft على Discord PdfCraft web page صفحة PdfCraft على الويب PdfCraft on GitHub PdfCraft على GitHub - ArtCraft website موقع ArtCraft Check for updates… التحقق من التحديثات… About PdfCraft حول PdfCraft Export a PDF تصدير ملف PDF diff --git a/crates/ui-egui/src/i18n/bg.tsv b/crates/ui-egui/src/i18n/bg.tsv index febd1f9..bbac865 100644 --- a/crates/ui-egui/src/i18n/bg.tsv +++ b/crates/ui-egui/src/i18n/bg.tsv @@ -1812,13 +1812,8 @@ Split document… Раздели документа… Number pages… Номерирай страниците… Keyboard shortcuts Клавишни комбинации - Join the ArtCraft Discord Присъедини се към ArtCraft в Discord - Join the ArtCraft community Присъедини се към общността на ArtCraft - Get help, share feedback and follow development on Discord. Получете помощ, споделете мнение и следете разработката в Discord. - Join our Discord Присъедини се към нашия Discord PdfCraft web page Уебстраница на PdfCraft PdfCraft on GitHub PdfCraft в GitHub - ArtCraft website Уебсайт на ArtCraft Check for updates… Провери за актуализации… About PdfCraft За PdfCraft JavaScript console… JavaScript конзола… diff --git a/crates/ui-egui/src/i18n/cs.tsv b/crates/ui-egui/src/i18n/cs.tsv index ee4f9bc..afb6e27 100644 --- a/crates/ui-egui/src/i18n/cs.tsv +++ b/crates/ui-egui/src/i18n/cs.tsv @@ -114,10 +114,8 @@ Split document… Rozdělit dokument… Number pages… Očíslovat stránky… Keyboard shortcuts Klávesové zkratky - Join the ArtCraft Discord Připojit se ke komunitě ArtCraft na Discordu PdfCraft web page Webová stránka PdfCraft PdfCraft on GitHub PdfCraft na GitHubu - ArtCraft website Web ArtCraft Check for updates… Zkontrolovat aktualizace… About PdfCraft O aplikaci PdfCraft Auto Automaticky @@ -221,7 +219,6 @@ key Space Mezerník {folder} is already pinned to Home Složka {folder} už je připnutá na úvodní obrazovce You can pin up to {n} folders. Unpin one first. Připnout lze nejvýše {n} složek. Nejdříve některou odepněte. Pinned {folder} to Home Složka {folder} je připnutá na úvodní obrazovce - Join our Discord Připojit se k našemu Discordu Close Zavřít Next / previous match Další / předchozí shoda Copy selected text Kopírovat vybraný text @@ -278,8 +275,6 @@ key Space Mezerník Current page — type a page number or label (such as iv) and press Enter Aktuální stránka — zadejte číslo nebo označení stránky (třeba iv) a stiskněte Enter Welcome to PdfCraft Vítá vás PdfCraft An open-source PDF workbench — local, private, and scriptable. Open-source dílna pro PDF — lokální, soukromá a skriptovatelná. - Join the ArtCraft community Připojte se ke komunitě ArtCraft - Get help, share feedback and follow development on Discord. Získejte pomoc, sdílejte zpětnou vazbu a sledujte vývoj na Discordu. Recommended tools Doporučené nástroje Use now Použít Open file Otevřít soubor diff --git a/crates/ui-egui/src/i18n/de.tsv b/crates/ui-egui/src/i18n/de.tsv index 7811a78..7be8d90 100644 --- a/crates/ui-egui/src/i18n/de.tsv +++ b/crates/ui-egui/src/i18n/de.tsv @@ -66,7 +66,6 @@ Flatten Fill & Sign when saving Ausfüllen und unterschreiben beim Speichern reduzieren Text, marks and signatures become part of the page. Other comments stay editable. Text, Markierungen und Unterschriften werden Teil der Seite. Andere Kommentare bleiben bearbeitbar. OK OK - Join our Discord Unserem Discord beitreten Close Schließen Next / previous match Nächster / vorheriger Treffer Copy selected text Ausgewählten Text kopieren @@ -134,8 +133,6 @@ Current page — type a page number or label (such as iv) and press Enter Aktuelle Seite – gib eine Seitenzahl oder -beschriftung ein (z. B. iv) und drücke die Eingabetaste Welcome to PdfCraft Willkommen bei PdfCraft An open-source PDF workbench — local, private, and scriptable. Eine Open-Source-PDF-Werkbank – lokal, privat und skriptfähig. - Join the ArtCraft community Tritt der ArtCraft-Community bei - Get help, share feedback and follow development on Discord. Hol dir Hilfe, gib Feedback und verfolge die Entwicklung auf Discord. Recommended tools Empfohlene Werkzeuge Use now Jetzt verwenden Open file Datei öffnen @@ -280,10 +277,8 @@ Split document… Dokument teilen… Number pages… Seiten nummerieren… Keyboard shortcuts Tastenkürzel - Join the ArtCraft Discord Dem ArtCraft-Discord beitreten PdfCraft web page PdfCraft-Webseite PdfCraft on GitHub PdfCraft auf GitHub - ArtCraft website ArtCraft-Website Check for updates… Nach Updates suchen… About PdfCraft Über PdfCraft Export a PDF PDF exportieren diff --git a/crates/ui-egui/src/i18n/el.tsv b/crates/ui-egui/src/i18n/el.tsv index 0a5030e..d307d2d 100644 --- a/crates/ui-egui/src/i18n/el.tsv +++ b/crates/ui-egui/src/i18n/el.tsv @@ -78,7 +78,6 @@ Side panels Πλευρικοί πίνακες Enable Acrobat JavaScript Ενεργοποίηση Acrobat JavaScript OK Εντάξει - Join our Discord Ελάτε στο Discord μας Close Κλείσιμο Next / previous match Επόμενο / προηγούμενο αποτέλεσμα Copy selected text Αντιγραφή επιλεγμένου κειμένου @@ -139,8 +138,6 @@ Previous page Προηγούμενη σελίδα Welcome to PdfCraft Καλώς ορίσατε στο PdfCraft An open-source PDF workbench — local, private, and scriptable. Ένα εργαλείο PDF ανοιχτού κώδικα — τοπικό, ιδιωτικό και αυτοματοποιήσιμο. - Join the ArtCraft community Γίνετε μέλος της κοινότητας ArtCraft - Get help, share feedback and follow development on Discord. Βρείτε βοήθεια, μοιραστείτε σχόλια και παρακολουθήστε την ανάπτυξη στο Discord. Recommended tools Προτεινόμενα εργαλεία Use now Χρήση τώρα Open file Άνοιγμα αρχείου @@ -1661,10 +1658,8 @@ Extract pages… Εξαγωγή σελίδων… Split document… Διαχωρισμός εγγράφου… Number pages… Αρίθμηση σελίδων… - Join the ArtCraft Discord Συμμετοχή στο Discord του ArtCraft PdfCraft web page Ιστότοπος του PdfCraft PdfCraft on GitHub PdfCraft στο GitHub - ArtCraft website Ιστότοπος ArtCraft Check for updates… Έλεγχος για ενημερώσεις… Export a PDF Εξαγωγή PDF Export to Εξαγωγή σε diff --git a/crates/ui-egui/src/i18n/es.tsv b/crates/ui-egui/src/i18n/es.tsv index ba79a5b..fe15d43 100644 --- a/crates/ui-egui/src/i18n/es.tsv +++ b/crates/ui-egui/src/i18n/es.tsv @@ -89,7 +89,6 @@ Flatten Fill & Sign when saving Acoplar Rellenar y firmar al guardar Text, marks and signatures become part of the page. Other comments stay editable. El texto, las marcas y las firmas pasan a formar parte de la página. Los demás comentarios siguen siendo editables. OK Aceptar - Join our Discord Únete a nuestro Discord Close Cerrar Next / previous match Coincidencia siguiente / anterior Copy selected text Copiar el texto seleccionado @@ -157,8 +156,6 @@ Current page — type a page number or label (such as iv) and press Enter Página actual: escribe un número o una etiqueta de página (por ejemplo, iv) y pulsa Intro Welcome to PdfCraft Te damos la bienvenida a PdfCraft An open-source PDF workbench — local, private, and scriptable. Un banco de trabajo PDF de código abierto: local, privado y automatizable. - Join the ArtCraft community Únete a la comunidad de ArtCraft - Get help, share feedback and follow development on Discord. Recibe ayuda, comparte tu opinión y sigue el desarrollo en Discord. Recommended tools Herramientas recomendadas Use now Usar ahora Open file Abrir archivo @@ -303,10 +300,8 @@ Split document… Dividir documento… Number pages… Numerar páginas… Keyboard shortcuts Atajos de teclado - Join the ArtCraft Discord Únete al Discord de ArtCraft PdfCraft web page Página web de PdfCraft PdfCraft on GitHub PdfCraft en GitHub - ArtCraft website Sitio web de ArtCraft Check for updates… Buscar actualizaciones… About PdfCraft Acerca de PdfCraft Export a PDF Exportar un PDF diff --git a/crates/ui-egui/src/i18n/fr.tsv b/crates/ui-egui/src/i18n/fr.tsv index e81b5f0..f7776be 100644 --- a/crates/ui-egui/src/i18n/fr.tsv +++ b/crates/ui-egui/src/i18n/fr.tsv @@ -66,7 +66,6 @@ Flatten Fill & Sign when saving Aplatir Remplir et signer à l'enregistrement Text, marks and signatures become part of the page. Other comments stay editable. Le texte, les marques et les signatures deviennent partie de la page. Les autres commentaires restent modifiables. OK OK - Join our Discord Rejoindre notre Discord Close Fermer Next / previous match Correspondance suivante / précédente Copy selected text Copier le texte sélectionné @@ -134,8 +133,6 @@ Current page — type a page number or label (such as iv) and press Enter Page actuelle — saisissez un numéro ou une étiquette de page (comme iv) et appuyez sur Entrée Welcome to PdfCraft Bienvenue dans PdfCraft An open-source PDF workbench — local, private, and scriptable. Un atelier PDF open source — local, privé et automatisable. - Join the ArtCraft community Rejoindre la communauté ArtCraft - Get help, share feedback and follow development on Discord. Obtenez de l'aide, partagez vos retours et suivez le développement sur Discord. Recommended tools Outils recommandés Use now Utiliser Open file Ouvrir un fichier @@ -280,10 +277,8 @@ Split document… Fractionner le document… Number pages… Numéroter les pages… Keyboard shortcuts Raccourcis clavier - Join the ArtCraft Discord Rejoindre le Discord ArtCraft PdfCraft web page Page web de PdfCraft PdfCraft on GitHub PdfCraft sur GitHub - ArtCraft website Site web d'ArtCraft Check for updates… Rechercher des mises à jour… About PdfCraft À propos de PdfCraft Export a PDF Exporter un PDF diff --git a/crates/ui-egui/src/i18n/hu.tsv b/crates/ui-egui/src/i18n/hu.tsv index b9b3f55..3a6f232 100644 --- a/crates/ui-egui/src/i18n/hu.tsv +++ b/crates/ui-egui/src/i18n/hu.tsv @@ -64,7 +64,6 @@ Side panels Oldalsó panelek Enable Acrobat JavaScript Acrobat JavaScript engedélyezése OK OK - Join our Discord Csatlakozás a Discordhoz Close Bezárás Next / previous match Következő / előző találat Copy selected text Kijelölt szöveg másolása @@ -132,8 +131,6 @@ Current page — type a page number or label (such as iv) and press Enter Aktuális oldal — írj be egy oldalszámot vagy címkét (például iv), majd nyomd meg az Entert Welcome to PdfCraft Üdvözöljük a PdfCraftban An open-source PDF workbench — local, private, and scriptable. Nyílt forráskódú PDF-munkapad — helyi, privát és parancsfájlokkal vezérelhető. - Join the ArtCraft community Csatlakozz az ArtCraft közösséghez - Get help, share feedback and follow development on Discord. Kérj segítséget, oszd meg a véleményed, és kövesd a fejlesztést a Discordon. Recommended tools Ajánlott eszközök Use now Használat most Open file Fájl megnyitása @@ -278,10 +275,8 @@ Split document… Dokumentum felosztása… Number pages… Oldalak számozása… Keyboard shortcuts Billentyűparancsok - Join the ArtCraft Discord Csatlakozás az ArtCraft Discordhoz PdfCraft web page A PdfCraft weblapja PdfCraft on GitHub PdfCraft a GitHubon - ArtCraft website Az ArtCraft webhelye Check for updates… Frissítések keresése… About PdfCraft A PdfCraftról Export a PDF PDF exportálása diff --git a/crates/ui-egui/src/i18n/it.tsv b/crates/ui-egui/src/i18n/it.tsv index 5448ef6..2ea097e 100644 --- a/crates/ui-egui/src/i18n/it.tsv +++ b/crates/ui-egui/src/i18n/it.tsv @@ -90,7 +90,6 @@ Side panels Pannelli laterali Enable Acrobat JavaScript Abilita JavaScript di Acrobat OK OK - Join our Discord Unisciti al nostro Discord Close Chiudi Next / previous match Risultato successivo/precedente Copy selected text Copia testo selezionato @@ -158,8 +157,6 @@ Current page — type a page number or label (such as iv) and press Enter Pagina corrente: digita un numero o un'etichetta di pagina (ad esempio iv) e premi Invio Welcome to PdfCraft Benvenuto in PdfCraft An open-source PDF workbench — local, private, and scriptable. Un banco di lavoro PDF open source: locale, riservato e programmabile. - Join the ArtCraft community Unisciti alla community di ArtCraft - Get help, share feedback and follow development on Discord. Chiedi aiuto, condividi commenti e segui lo sviluppo su Discord. Recommended tools Strumenti consigliati Use now Usa ora Open file Apri file @@ -304,10 +301,8 @@ Split document… Dividi documento… Number pages… Numera pagine… Keyboard shortcuts Scorciatoie da tastiera - Join the ArtCraft Discord Unisciti al Discord di ArtCraft PdfCraft web page Pagina web di PdfCraft PdfCraft on GitHub PdfCraft su GitHub - ArtCraft website Sito web di ArtCraft Check for updates… Verifica aggiornamenti… About PdfCraft Informazioni su PdfCraft Export a PDF Esporta un PDF diff --git a/crates/ui-egui/src/i18n/ja.tsv b/crates/ui-egui/src/i18n/ja.tsv index c427772..2e3b570 100644 --- a/crates/ui-egui/src/i18n/ja.tsv +++ b/crates/ui-egui/src/i18n/ja.tsv @@ -93,7 +93,6 @@ Side panels サイドパネル Enable Acrobat JavaScript Acrobat JavaScript を有効にする OK OK - Join our Discord Discord に参加 Close 閉じる Next / previous match 次/前の検索結果 Copy selected text 選択したテキストをコピー @@ -161,8 +160,6 @@ Current page — type a page number or label (such as iv) and press Enter 現在のページ:ページ番号またはラベル(例:iv)を入力して Enter Welcome to PdfCraft PdfCraft へようこそ An open-source PDF workbench — local, private, and scriptable. ローカルで処理し、プライバシーを守る、スクリプト対応のオープンソース PDF ツール。 - Join the ArtCraft community ArtCraft コミュニティに参加 - Get help, share feedback and follow development on Discord. Discord で質問やフィードバックを共有し、開発の進捗を確認できます。 Recommended tools おすすめのツール Use now 使用する Open file ファイルを開く @@ -307,10 +304,8 @@ Split document… 文書を分割… Number pages… ページ番号を設定… Keyboard shortcuts キーボードショートカット - Join the ArtCraft Discord ArtCraft の Discord に参加 PdfCraft web page PdfCraft の Web 版 PdfCraft on GitHub GitHub の PdfCraft - ArtCraft website ArtCraft のウェブサイト Check for updates… 更新を確認… About PdfCraft PdfCraft について Export a PDF PDF を書き出す diff --git a/crates/ui-egui/src/i18n/kk.tsv b/crates/ui-egui/src/i18n/kk.tsv index fc807c7..a612a1b 100644 --- a/crates/ui-egui/src/i18n/kk.tsv +++ b/crates/ui-egui/src/i18n/kk.tsv @@ -67,7 +67,6 @@ Side panels Бүйірлік панельдер Enable Acrobat JavaScript Acrobat JavaScript-ті қосу OK ОК - Join our Discord Discord-қа қосылыңыз Close Жабу Next / previous match Келесі / алдыңғы сәйкестік Copy selected text Таңдалған мәтінді көшіру @@ -122,8 +121,6 @@ Current page — type a page number or label (such as iv) and press Enter Ағымдағы бет — бет нөмірін немесе белгісін (мысалы, iv) теріңіз де, Enter пернесін басыңыз Welcome to PdfCraft PdfCraft-ге қош келдіңіз An open-source PDF workbench — local, private, and scriptable. Ашық бастапқы кодты PDF жұмыс орны — жергілікті, жеке әрі скрипттерді қолдайтын. - Join the ArtCraft community ArtCraft қауымдастығына қосылыңыз - Get help, share feedback and follow development on Discord. Көмек алыңыз, пікір бөлісіңіз және Discord-тағы әзірлеуді қадағалаңыз. Recommended tools Ұсынылған құралдар Use now Дәл қазір пайдалану Open file Файлды ашу @@ -267,10 +264,8 @@ Split document… Құжатты бөлу… Number pages… Беттерді нөмірлеу… Keyboard shortcuts Пернетақта тіркесімдері - Join the ArtCraft Discord ArtCraft Discord-ына қосылыңыз PdfCraft web page PdfCraft веб-сайты PdfCraft on GitHub GitHub-тағы PdfCraft - ArtCraft website ArtCraft веб-сайты Check for updates… Жаңартуларды тексеру… About PdfCraft PdfCraft туралы Export a PDF PDF экспорттау diff --git a/crates/ui-egui/src/i18n/lt.tsv b/crates/ui-egui/src/i18n/lt.tsv index 2b6ffa0..b320714 100644 --- a/crates/ui-egui/src/i18n/lt.tsv +++ b/crates/ui-egui/src/i18n/lt.tsv @@ -602,7 +602,6 @@ From {file} Iš {file} From: Nuo: Front side only Tik priekinė pusė - Get help, share feedback and follow development on Discord. Gaukite pagalbos, pateikite atsiliepimų ir sekite naujienas „Discord“. Go to a page view Pereiti į puslapio rodinį Go to page {p} Pereiti į puslapį {p} Go to the page Pereiti į puslapį @@ -654,8 +653,6 @@ JavaScript Console JavaScript konsolė JavaScript is turned off (Preferences ▸ JavaScript). JavaScript išjungtas (Nuostatos > JavaScript). JavaScript, e.g. getField("total").value JavaScript, pvz., getField("total").value - Join our Discord Prisijunkite prie mūsų „Discord“ serverio - Join the ArtCraft community Prisijunkite prie „ArtCraft“ bendruomenės Justify Abipusė lygiuotė Keep source fonts Išsaugoti šaltinio šriftus Keep tool selected Palikti įrankį pasirinktą @@ -1323,7 +1320,6 @@ Archive documents Archyvuoti dokumentus Area Plotas Arrow Rodyklė - ArtCraft website „ArtCraft“ svetainė Ask about this document Klausti apie šį dokumentą Attach a file Pridėti failą Attach file Pridėti failą @@ -1458,7 +1454,6 @@ Insert text Įterpti tekstą JavaScript JavaScript JavaScript console… JavaScript konsolė… - Join the ArtCraft Discord Prisijungti prie „ArtCraft“ „Discord“ serverio Light gray Šviesiai pilka Line Linija Link Saitas diff --git a/crates/ui-egui/src/i18n/pl.tsv b/crates/ui-egui/src/i18n/pl.tsv index ee205f5..3686d4e 100644 --- a/crates/ui-egui/src/i18n/pl.tsv +++ b/crates/ui-egui/src/i18n/pl.tsv @@ -89,7 +89,6 @@ Side panels Panele boczne Enable Acrobat JavaScript Włącz Acrobat JavaScript OK OK - Join our Discord Dołącz do naszego Discorda Close Zamknij Next / previous match Następne / poprzednie dopasowanie Copy selected text Kopiuj zaznaczony tekst @@ -157,8 +156,6 @@ Current page — type a page number or label (such as iv) and press Enter Bieżąca strona — wpisz numer lub etykietę strony (np. iv) i naciśnij Enter Welcome to PdfCraft Witamy w PdfCraft An open-source PDF workbench — local, private, and scriptable. Otwarty zestaw narzędzi do PDF — lokalny, prywatny i obsługujący skrypty. - Join the ArtCraft community Dołącz do społeczności ArtCraft - Get help, share feedback and follow development on Discord. Uzyskaj pomoc, podziel się opinią i śledź rozwój na Discordzie. Recommended tools Polecane narzędzia Use now Użyj teraz Open file Otwórz plik @@ -302,10 +299,8 @@ Split document… Podziel dokument… Number pages… Ponumeruj strony… Keyboard shortcuts Skróty klawiaturowe - Join the ArtCraft Discord Dołącz do Discorda ArtCraft PdfCraft web page Strona internetowa PdfCraft PdfCraft on GitHub PdfCraft na GitHubie - ArtCraft website Strona internetowa ArtCraft Check for updates… Sprawdź aktualizacje… About PdfCraft O PdfCraft Export a PDF Eksportuj PDF diff --git a/crates/ui-egui/src/i18n/pt-br.tsv b/crates/ui-egui/src/i18n/pt-br.tsv index f22ad9c..2271e36 100644 --- a/crates/ui-egui/src/i18n/pt-br.tsv +++ b/crates/ui-egui/src/i18n/pt-br.tsv @@ -1684,13 +1684,8 @@ Split document… Dividir documento… Number pages… Numerar páginas… Keyboard shortcuts Atalhos de teclado - Join the ArtCraft Discord Entrar no Discord do ArtCraft - Join the ArtCraft community Entrar na comunidade ArtCraft - Get help, share feedback and follow development on Discord. Obtenha ajuda, compartilhe comentários e acompanhe o desenvolvimento no Discord. - Join our Discord Entrar em nosso Discord PdfCraft web page Página da Web do PdfCraft PdfCraft on GitHub PdfCraft no GitHub - ArtCraft website Site do ArtCraft Check for updates… Verificar atualizações… About PdfCraft Sobre o PdfCraft JavaScript console… Console JavaScript… diff --git a/crates/ui-egui/src/i18n/ru.tsv b/crates/ui-egui/src/i18n/ru.tsv index ac054d0..59ed724 100644 --- a/crates/ui-egui/src/i18n/ru.tsv +++ b/crates/ui-egui/src/i18n/ru.tsv @@ -86,7 +86,6 @@ Flatten Fill & Sign when saving Расплющить «Заполнить и подписать» при сохранении Text, marks and signatures become part of the page. Other comments stay editable. Текст, пометки и подписи становятся частью страницы. Остальные комментарии можно по-прежнему править. OK OK - Join our Discord Присоединяйтесь к нашему Discord Close Закрыть Next / previous match Следующее / предыдущее совпадение Copy selected text Копировать выделенный текст @@ -154,8 +153,6 @@ Current page — type a page number or label (such as iv) and press Enter Текущая страница — введите номер или метку страницы (например, iv) и нажмите Enter Welcome to PdfCraft Добро пожаловать в PdfCraft An open-source PDF workbench — local, private, and scriptable. Открытый PDF-редактор — локальный, приватный и программируемый. - Join the ArtCraft community Присоединяйтесь к сообществу ArtCraft - Get help, share feedback and follow development on Discord. Получайте помощь, делитесь отзывами и следите за разработкой в Discord. Recommended tools Рекомендуемые инструменты Use now Использовать сейчас Open file Открыть файл @@ -300,10 +297,8 @@ Split document… Разделить документ… Number pages… Пронумеровать страницы… Keyboard shortcuts Горячие клавиши - Join the ArtCraft Discord Присоединяйтесь к Discord ArtCraft PdfCraft web page Веб-страница PdfCraft PdfCraft on GitHub PdfCraft на GitHub - ArtCraft website Веб-сайт ArtCraft Check for updates… Проверить обновления… About PdfCraft О программе PdfCraft Export a PDF Экспортировать PDF diff --git a/crates/ui-egui/src/i18n/sl.tsv b/crates/ui-egui/src/i18n/sl.tsv index e8dc016..1e0ce12 100644 --- a/crates/ui-egui/src/i18n/sl.tsv +++ b/crates/ui-egui/src/i18n/sl.tsv @@ -229,7 +229,6 @@ Archive documents Arhiviraj dokumente Area Ploščina Arrow Puščica - ArtCraft website Spletna stran ArtCraft Ask about this document Vprašaj o tem dokumentu Asks GitHub for the latest release. Nothing is downloaded or installed automatically. Vpraša GitHub za najnovejšo izdajo. Ničesar se ne prenese ali namesti samodejno. Associated with content Povezano z vsebino @@ -865,7 +864,6 @@ Full screen mode Celozaslonski način General Splošno Geospatial location Geoprostorska lokacija - Get help, share feedback and follow development on Discord. Poiščite pomoč, delite povratne informacije in spremljajte razvoj na Discordu. Go to a page view Pojdi na pogled strani Go to page {p} Pojdi na stran {p} Go to page… Pojdi na stran… @@ -971,9 +969,6 @@ JavaScript console… Konzola JavaScript… JavaScript is turned off (Preferences ▸ JavaScript). JavaScript je izklopljen (Nastavitve > JavaScript). JavaScript, e.g. getField("total").value JavaScript, npr. getField("total").value - Join our Discord Discord kanal - Join the ArtCraft Discord Pridružite se Discordu ArtCraft - Join the ArtCraft community Pridružite se skupnosti ArtCraft July Julij June Junij Justify Obojestransko poravnano diff --git a/crates/ui-egui/src/i18n/te.tsv b/crates/ui-egui/src/i18n/te.tsv index 292b9ae..2453c38 100644 --- a/crates/ui-egui/src/i18n/te.tsv +++ b/crates/ui-egui/src/i18n/te.tsv @@ -70,7 +70,6 @@ comment menu Edit సవరించు Side panels సైడ్ ప్యానెల్‌లు Enable Acrobat JavaScript Acrobat JavaScriptను ప్రారంభించు OK సరే - Join our Discord మా Discordలో చేరండి Close మూసివేయి Next / previous match తదుపరి / మునుపటి సరిపోలిక Copy selected text ఎంచుకున్న టెక్స్ట్‌ను కాపీ చేయి @@ -138,8 +137,6 @@ comment menu Edit సవరించు Current page — type a page number or label (such as iv) and press Enter ప్రస్తుత పేజీ — పేజీ సంఖ్యను లేదా లేబుల్‌ను (iv వంటిది) టైప్ చేసి Enter నొక్కండి Welcome to PdfCraft PdfCraftకు స్వాగతం An open-source PDF workbench — local, private, and scriptable. ఓపెన్-సోర్స్ PDF వర్క్‌బెంచ్ — మీ కంప్యూటర్‌లోనే నడుస్తుంది, గోప్యంగా ఉంటుంది, స్క్రిప్ట్‌లతో ఆటోమేట్ చేయవచ్చు. - Join the ArtCraft community ArtCraft కమ్యూనిటీలో చేరండి - Get help, share feedback and follow development on Discord. Discordలో సహాయం పొందండి, మీ అభిప్రాయాన్ని పంచుకోండి, అభివృద్ధిని అనుసరించండి. Recommended tools సిఫార్సు చేసిన సాధనాలు Use now ఇప్పుడే ఉపయోగించు Open file ఫైల్‌ను తెరువు @@ -284,10 +281,8 @@ comment menu Edit సవరించు Split document… పత్రాన్ని విభజించు… Number pages… పేజీలకు సంఖ్యలు వేయి… Keyboard shortcuts కీబోర్డ్ షార్ట్‌కట్‌లు - Join the ArtCraft Discord ArtCraft Discordలో చేరండి PdfCraft web page PdfCraft వెబ్ పేజీ PdfCraft on GitHub GitHubలో PdfCraft - ArtCraft website ArtCraft వెబ్‌సైట్ Check for updates… అప్‌డేట్‌ల కోసం తనిఖీ చేయి… About PdfCraft PdfCraft గురించి Export a PDF PDFను ఎగుమతి చేయి diff --git a/crates/ui-egui/src/i18n/tr.tsv b/crates/ui-egui/src/i18n/tr.tsv index 0d990dc..8ff605b 100644 --- a/crates/ui-egui/src/i18n/tr.tsv +++ b/crates/ui-egui/src/i18n/tr.tsv @@ -57,7 +57,6 @@ Flatten Fill & Sign when saving Kaydederken Doldur ve İmzala'yı düzleştir Text, marks and signatures become part of the page. Other comments stay editable. Metin, işaretler ve imzalar sayfanın bir parçası olur. Diğer yorumlar düzenlenebilir kalır. OK Tamam - Join our Discord Discord'umuza katılın Close Kapat Next / previous match Sonraki / önceki eşleşme Copy selected text Seçilen metni kopyala @@ -119,8 +118,6 @@ Current page — type a page number or label (such as iv) and press Enter Geçerli sayfa — bir sayfa numarası veya etiketi (örneğin iv) yazıp Enter'a basın Welcome to PdfCraft PdfCraft'a Hoş Geldiniz An open-source PDF workbench — local, private, and scriptable. Açık kaynaklı bir PDF çalışma alanı — yerel, gizli ve komut dosyalarıyla yönetilebilir. - Join the ArtCraft community ArtCraft topluluğuna katılın - Get help, share feedback and follow development on Discord. Discord'da yardım alın, geri bildirim paylaşın ve geliştirmeyi takip edin. Recommended tools Önerilen araçlar Use now Şimdi kullan Open file Dosya aç @@ -265,10 +262,8 @@ Split document… Belgeyi böl… Number pages… Sayfaları numaralandır… Keyboard shortcuts Klavye kısayolları - Join the ArtCraft Discord ArtCraft Discord'una katıl PdfCraft web page PdfCraft web sayfası PdfCraft on GitHub GitHub'da PdfCraft - ArtCraft website ArtCraft web sitesi Check for updates… Güncellemeleri denetle… About PdfCraft PdfCraft hakkında Export a PDF PDF'i dışa aktar diff --git a/crates/ui-egui/src/i18n/uk.tsv b/crates/ui-egui/src/i18n/uk.tsv index 89aa68d..f6707ce 100644 --- a/crates/ui-egui/src/i18n/uk.tsv +++ b/crates/ui-egui/src/i18n/uk.tsv @@ -91,7 +91,6 @@ Side panels Бічні панелі Enable Acrobat JavaScript Увімкнути Acrobat JavaScript OK OK - Join our Discord Приєднатися до нашого Discord Close Закрити Next / previous match Наступний / попередній збіг Copy selected text Копіювати виділений текст @@ -159,8 +158,6 @@ Current page — type a page number or label (such as iv) and press Enter Поточна сторінка — введіть номер або позначку сторінки (наприклад iv) і натисніть Enter Welcome to PdfCraft Вітаємо в PdfCraft An open-source PDF workbench — local, private, and scriptable. Відкритий інструментарій для PDF — локальний, приватний і з підтримкою сценаріїв. - Join the ArtCraft community Приєднатися до спільноти ArtCraft - Get help, share feedback and follow development on Discord. Отримуйте допомогу, діліться відгуками й стежте за розробкою в Discord. Recommended tools Рекомендовані інструменти Use now Використати зараз Open file Відкрити файл @@ -305,10 +302,8 @@ Split document… Розділити документ… Number pages… Пронумерувати сторінки… Keyboard shortcuts Клавіатурні скорочення - Join the ArtCraft Discord Приєднатися до Discord ArtCraft PdfCraft web page Вебсторінка PdfCraft PdfCraft on GitHub PdfCraft на GitHub - ArtCraft website Вебсайт ArtCraft Check for updates… Перевірити оновлення… About PdfCraft Про PdfCraft Export a PDF Експортувати PDF diff --git a/crates/ui-egui/src/i18n/zh-hans.tsv b/crates/ui-egui/src/i18n/zh-hans.tsv index a1e6e25..b3e1770 100644 --- a/crates/ui-egui/src/i18n/zh-hans.tsv +++ b/crates/ui-egui/src/i18n/zh-hans.tsv @@ -1819,13 +1819,8 @@ Split document… 拆分文档… Number pages… 页面编号… Keyboard shortcuts 键盘快捷键 - Join the ArtCraft Discord 加入 ArtCraft Discord - Join the ArtCraft community 加入 ArtCraft 社区 - Get help, share feedback and follow development on Discord. 在 Discord 上获取帮助、分享反馈并关注开发动态。 - Join our Discord 加入我们的 Discord PdfCraft web page PdfCraft 网页 PdfCraft on GitHub GitHub 上的 PdfCraft - ArtCraft website ArtCraft 官网 Check for updates… 检查更新… About PdfCraft 关于 PdfCraft JavaScript console… JavaScript 控制台… diff --git a/crates/ui-egui/src/i18n/zh-hant.tsv b/crates/ui-egui/src/i18n/zh-hant.tsv index c9db457..92ba8da 100644 --- a/crates/ui-egui/src/i18n/zh-hant.tsv +++ b/crates/ui-egui/src/i18n/zh-hant.tsv @@ -1763,13 +1763,8 @@ Split document… 分割文件… Number pages… 編訂頁碼… Keyboard shortcuts 鍵盤快速鍵 - Join the ArtCraft Discord 加入 ArtCraft Discord - Join the ArtCraft community 加入 ArtCraft 社群 - Get help, share feedback and follow development on Discord. 在 Discord 取得協助、提供意見並追蹤開發進度。 - Join our Discord 加入 Discord 社群 PdfCraft web page PdfCraft 網頁 PdfCraft on GitHub GitHub 上的 PdfCraft - ArtCraft website ArtCraft 網站 Check for updates… 尋找更新… About PdfCraft 關於 PdfCraft JavaScript console… JavaScript 主控台… diff --git a/crates/ui-egui/src/widgets.rs b/crates/ui-egui/src/widgets.rs index 4f5aaa7..b9ab45e 100644 --- a/crates/ui-egui/src/widgets.rs +++ b/crates/ui-egui/src/widgets.rs @@ -499,35 +499,14 @@ pub fn progress_notice(app: &PdfCraftApp, ctx: &egui::Context) -> bool { cancel } -/// The ArtCraft wordmark (Storyteller's brand, docs/brand/; not open source), sized to `height`. -pub fn artcraft_logo(ui: &mut egui::Ui, height: f32) -> Response { - let dark = ui.visuals().dark_mode; - let (uri, bytes): (&str, &'static [u8]) = if dark { - ("bytes://artcraft-logo-white.svg", include_bytes!("../../../docs/brand/artcraft-logo-white.svg")) - } else { - ("bytes://artcraft-logo.svg", include_bytes!("../../../docs/brand/artcraft-logo.svg")) - }; - ui.add(egui::Image::from_bytes(uri, bytes).max_height(height).alt_text("ArtCraft")) -} - -/// The ArtCraft mark (brand blue, works on light and dark), `size` points square. -pub fn artcraft_mark(ui: &mut egui::Ui, size: f32) -> Response { - ui.add( - egui::Image::from_bytes("bytes://artcraft-mark.svg", include_bytes!("../../../docs/brand/artcraft-mark.svg")) - .fit_to_exact_size(vec2(size, size)) - .alt_text("ArtCraft"), - ) -} - -/// Buttons for every community link (`pdfcraft_engine::links`), Discord first and prominent. +/// Buttons for every project link (`pdfcraft_engine::links`). /// Returns the registry command of the one clicked. pub fn community_links(ui: &mut egui::Ui) -> Option<&'static str> { let mut clicked = None; ui.horizontal_wrapped(|ui| { ui.spacing_mut().item_spacing = vec2(8.0, 8.0); - for (i, l) in pdfcraft_engine::links::LINKS.iter().enumerate() { - let resp = if i == 0 { icon_pill(ui, l.icon, tl!("Join our Discord"), true) } else { icon_pill(ui, l.icon, tl!(l.label), false) }; - if resp.on_hover_text(l.url).clicked() { + for l in pdfcraft_engine::links::LINKS { + if icon_pill(ui, l.icon, tl!(l.label), false).on_hover_text(l.url).clicked() { clicked = Some(l.command); } } diff --git a/crates/ui-egui/tests/ui.rs b/crates/ui-egui/tests/ui.rs index cef2bca..24b9881 100644 --- a/crates/ui-egui/tests/ui.rs +++ b/crates/ui-egui/tests/ui.rs @@ -302,8 +302,8 @@ fn tabs_shrink_to_fit_then_arrows_step_through_them_and_open_stays_in_sight() { } }); let open = h.get_by_label("Open").rect(); - let discord = h.get_by_label("Discord").rect(); - assert!(open.right() <= discord.left(), "Open {open:?} must not run under Discord {discord:?}"); + let controls = h.get_by_label("Keyboard shortcuts").rect(); + assert!(open.right() <= controls.left(), "Open {open:?} must not run under the controls {controls:?}"); let mut previous_right = f32::MIN; for i in 0..5 { let tab = h.get_by_label(&name(i)).rect(); @@ -327,15 +327,15 @@ fn tabs_shrink_to_fit_then_arrows_step_through_them_and_open_stays_in_sight() { assert_eq!(enabled(&h, "Scroll tabs right"), Some(true), "and then there is more to the right"); let open = h.get_by_label("Open").rect(); let right = h.get_by_label("Scroll tabs right").rect(); - assert!(right.right() <= open.left() + 0.5 && open.right() <= h.get_by_label("Discord").rect().left()); - // Twenty: Open stays in sight left of Discord. + assert!(right.right() <= open.left() + 0.5 && open.right() <= h.get_by_label("Keyboard shortcuts").rect().left()); + // Twenty: Open stays in sight left of the controls. for i in 0..13 { h.state_mut().open_bytes(&format!("more-{i:02}.pdf"), None, FIXTURE.to_vec()).unwrap(); } h.run_steps(4); let open = h.get_by_label("Open").rect(); - let discord = h.get_by_label("Discord").rect(); - assert!(open.left() > 0.0 && open.right() <= discord.left(), "Open {open:?} stays in sight left of Discord {discord:?}"); + let controls = h.get_by_label("Keyboard shortcuts").rect(); + assert!(open.left() > 0.0 && open.right() <= controls.left(), "Open {open:?} stays in sight left of the controls {controls:?}"); } /// macOS (#789): with the integrated title bar, the strip is the 28 pt band AppKit centres the @@ -348,7 +348,7 @@ fn the_integrated_title_bar_is_the_traffic_light_band() { app.open_bytes("band.pdf", None, FIXTURE.to_vec()).unwrap(); }); let band = 28.0; - for label in ["Home", "band.pdf", "Open", "Discord", "Keyboard shortcuts"] { + for label in ["Home", "band.pdf", "Open", "Keyboard shortcuts"] { let r = h.get_by_label(label).rect(); assert!(r.top() >= 0.0 && r.bottom() <= band, "{label}: {r:?} inside the {band} pt title bar"); assert!(r.height() >= 24.0, "{label}: {r:?} stays clickable"); diff --git a/crates/ui-egui/tests/ui_group/links.rs b/crates/ui-egui/tests/ui_group/links.rs index b08036b..820d1e5 100644 --- a/crates/ui-egui/tests/ui_group/links.rs +++ b/crates/ui-egui/tests/ui_group/links.rs @@ -1,5 +1,4 @@ -//! Community links: the Discord button is one click away everywhere; Help menu, About dialog and -//! home screen open the ArtCraft and PdfCraft pages. +//! Project links: the Help menu and About dialog open the PdfCraft GitHub page. use egui_kittest::Harness; use egui_kittest::kittest::Queryable; @@ -18,42 +17,16 @@ fn harness(setup: impl FnOnce(&mut PdfCraftApp) + 'static) -> Harness<'static, P } #[test] -fn discord_button_in_the_top_bar_opens_discord() { - let mut h = harness(|_| {}); - h.get_by_label("Discord").click(); - h.run_steps(2); - assert_eq!(h.state().last_opened_url.as_deref(), Some(links::DISCORD)); - assert_eq!(links::DISCORD, "https://discord.gg/artcraft"); -} - -#[test] -fn home_screen_links() { - for (label, url) in [ - ("Join our Discord", links::DISCORD), - ("PdfCraft web page", "https://getartcraft.com/apps/pdfcraft"), - ("PdfCraft on GitHub", "https://github.com/storytold/pdfcraft"), - ("ArtCraft website", "https://getartcraft.com"), - ] { - let mut h = harness(|_| {}); - h.get_by_label("Join the ArtCraft community"); - h.get_by_label(label).click(); - h.run_steps(2); - assert_eq!(h.state().last_opened_url.as_deref(), Some(url), "{label}"); - } -} - -#[test] -fn about_dialog_shows_the_brand_and_links() { +fn about_dialog_shows_the_links() { let pdf = b"%PDF-1.7\n1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj\n2 0 obj << /Type /Pages /Kids [3 0 R] /Count 1 >> endobj\n3 0 obj << /Type /Page /Parent 2 0 R /MediaBox [0 0 200 200] >> endobj\ntrailer << /Root 1 0 R >>\n%%EOF"; // With a document open, so the home screen's own links are not on screen. let mut h = harness(move |app| { app.open_bytes("one.pdf", None, pdf.to_vec()).unwrap(); app.dialog = Some(Dialog::About); }); - assert!(h.query_all_by_label("ArtCraft").count() >= 2, "the mark and the wordmark (alt text)"); - h.get_by_label("Join our Discord").click(); + h.get_by_label("PdfCraft on GitHub").click(); h.run_steps(2); - assert_eq!(h.state().last_opened_url.as_deref(), Some(links::DISCORD)); + assert_eq!(h.state().last_opened_url.as_deref(), Some(links::GITHUB)); } #[test] diff --git a/docs/brand/LICENSE-brand.txt b/docs/brand/LICENSE-brand.txt deleted file mode 100644 index 1d2c4ef..0000000 --- a/docs/brand/LICENSE-brand.txt +++ /dev/null @@ -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 PdfCraft'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 PdfCraft itself, its documentation and its official builds, to identify PdfCraft 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 PdfCraft, 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 PdfCraft. - -Forks and modified versions - -If you distribute or publish a modified version of PdfCraft, 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 PdfCraft 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. diff --git a/docs/brand/artcraft-logo-white.png b/docs/brand/artcraft-logo-white.png deleted file mode 100644 index 8cfb31d940f6663ecaf93da2bc04c5904704b4af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32161 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 - ArtCraft - - - - - diff --git a/docs/brand/artcraft-logo.png b/docs/brand/artcraft-logo.png deleted file mode 100644 index a4d1544caa4c8b8dae14e1d10d79afa197261e3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31302 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 z 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 diff --git a/docs/brand/artcraft-logo.svg b/docs/brand/artcraft-logo.svg deleted file mode 100644 index d63f3ea..0000000 --- a/docs/brand/artcraft-logo.svg +++ /dev/null @@ -1,7 +0,0 @@ - - ArtCraft - - - - - diff --git a/docs/brand/artcraft-mark-black.png b/docs/brand/artcraft-mark-black.png deleted file mode 100644 index 27664bc119d2b485ba6fee213ee749df658ab508..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26793 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 diff --git a/docs/brand/artcraft-mark-black.svg b/docs/brand/artcraft-mark-black.svg deleted file mode 100644 index 6394353..0000000 --- a/docs/brand/artcraft-mark-black.svg +++ /dev/null @@ -1,4 +0,0 @@ - - ArtCraft - - diff --git a/docs/brand/artcraft-mark.png b/docs/brand/artcraft-mark.png deleted file mode 100644 index dbb3dc08955f8214561c7922730e78266600aa36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24715 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 Cm;%NC diff --git a/docs/brand/artcraft-mark.svg b/docs/brand/artcraft-mark.svg deleted file mode 100644 index 72e191f..0000000 --- a/docs/brand/artcraft-mark.svg +++ /dev/null @@ -1,4 +0,0 @@ - - ArtCraft - - diff --git a/packaging/linux/ai.storyteller.pdfcraft.metainfo.xml.in b/packaging/linux/ai.storyteller.pdfcraft.metainfo.xml.in index c8251ac..3b6aa32 100644 --- a/packaging/linux/ai.storyteller.pdfcraft.metainfo.xml.in +++ b/packaging/linux/ai.storyteller.pdfcraft.metainfo.xml.in @@ -19,10 +19,10 @@ ai.storyteller.pdfcraft.desktop ai.storyteller.pdfcraft - https://getartcraft.com/apps/pdfcraft + https://github.com/storytold/pdfcraft https://github.com/storytold/pdfcraft/issues https://github.com/storytold/pdfcraft - https://discord.gg/artcraft + https://github.com/storytold/pdfcraft/issues Office Viewer diff --git a/packaging/linux/nfpm.yaml b/packaging/linux/nfpm.yaml index b20bcb6..677fdf3 100644 --- a/packaging/linux/nfpm.yaml +++ b/packaging/linux/nfpm.yaml @@ -14,7 +14,7 @@ section: graphics priority: optional maintainer: ${PDFCRAFT_MAINTAINER} vendor: Learning Machines LLC -homepage: https://getartcraft.com/apps/pdfcraft +homepage: https://github.com/storytold/pdfcraft license: MIT OR Apache-2.0 description: |- Open-source, native PDF workbench: read, comment, fill and sign forms, diff --git a/packaging/windows/pdfcraft.wxs b/packaging/windows/pdfcraft.wxs index e8bb537..b721f8e 100644 --- a/packaging/windows/pdfcraft.wxs +++ b/packaging/windows/pdfcraft.wxs @@ -34,9 +34,9 @@ Add/Remove Programs show a blank icon (#57). --> - - - + + + diff --git a/tools/craft-skills b/tools/craft-skills new file mode 160000 index 0000000..2c1fed9 --- /dev/null +++ b/tools/craft-skills @@ -0,0 +1 @@ +Subproject commit 2c1fed9237a3c3320cd0be9837398399fe467170 diff --git a/xtask/src/assets.rs b/xtask/src/assets.rs index fc95a6f..8e0c98e 100644 --- a/xtask/src/assets.rs +++ b/xtask/src/assets.rs @@ -36,11 +36,6 @@ pub const ALLOWED_LICENCES: &[&str] = &[ ]; /// The closed list of Adobe-authored, non-visual technical data (AGENTS.md §1.1): (crate, path). -/// Storyteller's own brand marks (the ArtCraft name and logos): shipped in the app and docs, but -/// not licensed for reuse by forks. Allowed only for `kind = "logo"` entries under `docs/brand/` -/// (AGENTS.md §1.2). -pub const BRAND_LICENCE: &str = "LicenseRef-Storyteller-Trademark"; - pub const ADOBE_DATA_ALLOWED: &[(&str, &str)] = &[("hayro-cmap", "assets/cmaps.brotli"), ("hayro-interpret", "src/font/generated/metrics.rs")]; /// First-party files on that same closed list: generated tables of Adobe-authored non-visual @@ -241,10 +236,7 @@ pub fn check(root: &Path, m: &Manifest, repo_files: &[String], lock: &BTreeSet<( if !seen.insert(a.path.clone()) { problems.push(format!("{}: listed twice", a.path)); } - let brand = a.licence == BRAND_LICENCE && a.kind == "logo" && a.path.starts_with("docs/brand/"); - if !brand { - licence_ok(&a.path, &a.licence, &mut problems); - } + licence_ok(&a.path, &a.licence, &mut problems); if !root.join(&a.licence_file).is_file() { problems.push(format!("{}: licence file {} is missing", a.path, a.licence_file)); } @@ -549,22 +541,6 @@ mod tests { assert!(p.iter().any(|p| p.contains("SHA-256 does not match")), "{p:?}"); } - #[test] - fn brand_licence_only_for_brand_logos() { - let root = super::root(); - for (path, kind, pass) in [ - ("docs/brand/artcraft-mark.svg", "logo", true), - ("docs/brand/artcraft-mark.svg", "icon", false), - ("assets/icons/mark.svg", "logo", false), - ] { - let mut a = asset(path, "Storyteller", kind, BRAND_LICENCE); - a.licence_file = "docs/brand/LICENSE-brand.txt".into(); - let m = Manifest { asset: vec![a], ..Default::default() }; - let p = check(&root, &m, &[], &BTreeSet::new()); - assert_eq!(p.iter().all(|p| !p.contains("allowlist")), pass, "{path} {kind}: {p:?}"); - } - } - #[test] fn adobe_data_only_on_the_closed_list() { let l = lock(&[("hayro-cmap", "1.0.0"), ("other", "1.0.0")]); diff --git a/xtask/src/screenshots.rs b/xtask/src/screenshots.rs index 243d8b0..49bbe6d 100644 --- a/xtask/src/screenshots.rs +++ b/xtask/src/screenshots.rs @@ -106,14 +106,7 @@ fn update_attribution(root: &Path) -> Result<()> { let stem = file.trim_end_matches(".png"); let scene = SCENES.iter().find(|(n, ..)| *n == stem); let (title, usage) = scene.map(|(_, t, u, _)| (*t, *u)).unwrap_or(("PdfCraft screenshot", "README")); - // The home screen shows the ArtCraft mark: say so (it is a Storyteller trademark, not open - // source; AGENTS.md §1.2), so the screenshot's licence is not read as covering it. - let shows_home = scene.is_some_and(|(.., args)| args.windows(2).any(|w| w[0] == "--home" && w[1] == "on")); - let contents = if shows_home { - "Shows PdfCraft UI, Lucide icons, the showcase PDF built from the [[fetched]] OFL fonts, and the ArtCraft mark (Storyteller trademark from docs/brand/, not covered by this licence)" - } else { - "Shows only PdfCraft UI, Lucide icons and the showcase PDF built from the [[fetched]] OFL fonts" - }; + let contents = "Shows only PdfCraft UI, Lucide icons and the showcase PDF built from the [[fetched]] OFL fonts"; let bytes = std::fs::read(root.join("docs/images").join(file))?; out.push_str(&format!( "\n[[asset]]\npath = \"docs/images/{file}\"\ntitle = \"PdfCraft screenshot: {title}\"\nauthor = \"PdfCraft contributors (generated by `cargo xtask screenshots`)\"\nsource = \"this repository\"\nlicence = \"MIT OR Apache-2.0\"\nlicence_file = \"LICENSE-MIT\"\nkind = \"image\"\nusage = \"{usage}. {contents}\"\nsha256 = \"{}\"\n",