* claim: #3457 * Hebrew interface language with right-to-left text (#3457) Adds a complete Hebrew catalog (assets/locales/he.json, original translations) and registers `he`. egui 0.36 shapes each font run with harfrust, so a run of Hebrew letters is drawn right to left, but it places the runs of a line left to right in stored order. The new `bidi` module runs the Unicode Bidirectional Algorithm (unicode-bidi, MIT OR Apache-2.0) over each message of a right-to-left catalog once, giving egui the runs in display order with brackets mirrored and placeholders kept whole, while leaving each Hebrew run's letters in reading order for the shaper. A test lays messages out with a real Hebrew font and checks where the glyphs land. Desktop builds append a system Hebrew font (Arial Hebrew / SF Hebrew, Segoe UI / Arial, Noto Sans Hebrew / DejaVu Sans). Layout mirroring, wrapped multi-line RTL paragraphs and a web Hebrew font are follow-ups. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Hebrew: translate the new Describe Command label; list he in the control protocol Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Hebrew: catch up with main's catalog and the new ribbon (#3457) - Translate the 258 messages main added since the branch was cut, drop the 38 it removed (10 renamed ones keep their translation) and retranslate the two whose English changed (toolbar → application bar). - The timeline title is ציר הזמן, matching the glossary. - Ribbon buttons split their labels into two lines from the start of the string; Hebrew labels come in display order, so the first line showed the end of the phrase ("חדשה / סקיצה"). For right-to-left labels the first line now takes the words at the end of the string, and a shortened line loses characters, and shows its ellipsis, on the left. The word-boundary sweep checks Hebrew from the lines the galley is built from, since epaint's right-to-left rows carry zero-width glyphs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Hebrew: after rebasing onto main, load the Hebrew face with the cached system fonts main now searches the system fallback faces once (SystemFonts, on a thread); the Hebrew face joins that search with its coverage check. Drop the three camera-animation messages main removed (#4296) from the Hebrew catalog. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Hebrew: translate the messages main added after the catch-up (#3457) Translates the messages main added since the last catch-up: the history bar's buttons and name toggles, the 3D mouse driver and axis mapping, the thread size columns, the File view (home page), the redesigned Preferences, the new issue report dialog, free orbit and the assistant's setup card. Drops the one message main removed. The catalog has every English message again, so the complete-catalog checks pass for he. * Arabic interface language (right-to-left, on the Hebrew bidi path) Adds an original Arabic translation of the whole English catalog (assets/locales/ar.json, every message) and registers it. `ar` joins the complete catalogs, so a message added to en.json later fails the build until it is translated. It goes through the right-to-left path of #3458 unchanged: crate::bidi puts each message in display order and leaves every Arabic word's letters in reading order for harfrust, which joins them with the font's own tables. Ribbon labels use the right-to-left line split from the same stack. fonts.rs adds a system Arabic fallback after the Latin interface font, which keeps spaces, digits and Latin text so each Arabic word stays one shaped run: Segoe UI/Tahoma/Arial on Windows, SF Arabic/Geeza Pro/ Damascus/Tahoma on macOS, Noto Sans or Naskh Arabic/KACST One/DejaVu Sans on Linux, or NotoSansArabic-Regular.ttf in CRAFT_FONTS_DIR. It is the first fallback for an Arabic UI (Arial Unicode, a CJK candidate, has Arabic letters without joining data) and the last otherwise; like Thai and Hebrew it is never promoted for a CJK interface. Tests: the catalog comes back in display order with no directional controls, and Arabic laid out with a real font lands on screen word by word in reading order. * Hebrew: review the catch-up translations; restore the camera-animation messages (#3457) - Review of the 533 messages translated in the previous commit: 21 corrected. Keys in the motion dialog are keyframes (נקודות מפתח, as in Add Key), the Design workspace is תכן as in its label, a dropped "(Direct Driver)" is restored, terms aligned with the rest of the catalog (פורמט, סוכן קוד, רצועת הכלים), and a few calques reworded. - Translate ui.animate_view_changes, ui.animation_speed and ui.look_at_anim_desc, which main has again, so he stays complete. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Arabic and Hebrew: translate the messages main added since (#3457, #3762) Both catalogs again carry every English message. The 760 messages main added since the last rebase (render workspace, material editor, standard views, sheet metal Path Flange, AI app connections, document-on-disk notices and more) come from A-AL-ANAZI's translations on #3768; the five Perforate dialog messages are new here. The earlier Hebrew review is kept on top of them, and 33 of the new Hebrew messages are corrected: "completed" was "perfect" (מושלם → גמור), Regrade read as ranking (now תיקון צבע מחדש), shaders, guarantee, the Mirror reflection mode, simulations and displacement. Co-authored-by: Abdullah <alksa2025@gmail.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Arabic and Hebrew: attribution rows as a pending file main now takes new ATTRIBUTION.md rows as one file per change (attribution/pending/), so the he.json and ar.json rows move there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Arabic and Hebrew: translate the 23 messages main added since (#3457, #3762) Both catalogs again carry every English message; the two theme-page messages main removed are dropped. Twelve of the new messages (link updates while loading, the agent chat's model choice, plugin search, render quality) come from A-AL-ANAZI's translations on #3768; the sketch plane descriptions, the rigid group and empty-boolean messages, free sketch points and the web update note are new here. Co-authored-by: Abdullah <alksa2025@gmail.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Arabic and Hebrew: translate the 12 messages main added since (#3457, #3762) Eleven come from A-AL-ANAZI's #3768; "Turn Up Axis" in Hebrew follows the catalog's existing up-axis wording, and the agent chat's no-tool-call message is new in both. Co-authored-by: Abdullah <alksa2025@gmail.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Arabic and Hebrew: translate the 22 messages main added since (#3457, #3762) * Arabic and Hebrew: a label found by its English text comes back in display order too (#3457, #3762) * Arabic and Hebrew: translate the 32 messages main added since (#3457, #3762) * Arabic and Hebrew: translate the 34 messages main added since (#3457, #3762) * Arabic and Hebrew: translate the 30 messages main added since (#3457, #3762) * Arabic and Hebrew: translate the 7 messages main added since (#3457, #3762) --------- Co-authored-by: rootarchitect <7781866+rootarchitect@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Abdullah alanazi <x1700@MacBook-Air-Abdullah-2.local>
Application resources
assets/ is the design resource home for SolidCraft.
ATTRIBUTION.md is the file inventory and provenance record.
Keep one editable master per resource and place shipped derivatives in exports/.
assets/
icons/
app/
shared/source/ # original Rust mark and executable ICO encoder
macos/source/SolidCraft.icon/ # approved Composer project and linked SVGs
macos/exports/ # paired Assets.car and icon.icns
windows/exports/ # executable DIB ICO and installer PNG ICO
linux/exports/hicolor/ # Linux/FreeBSD package images, 16–512 px
ui/design/svg/ # authoritative original UI icon masters
ui/design/tools/ # authoring bases, checks and included review app
ui/source/ # Rust viewport glyphs, markers and navigation
branding/web/source/og.png # shared social preview card
styles/ui/palettes.rs # light/dark defaults
styles/web/loading.css # web loading/canvas styles
appearances/library.rs # built-in visual presets
materials/library.rs # physical defaults and colours
shaders/viewport.wgsl # original viewport shader
fonts/{liberation-sans,biz-udp-gothic}/ # unmodified fonts and OFL licences
locales/{en,de,ja,ko}.json # shared offline catalogs
platforms/{macos,linux,windows}/ # bundle, freedesktop and WiX templates
platforms/macos/dmg/ # disk image window: layout, dmgbuild settings, background art
archive/icons/macos-v1/
source/icon.vectorcraft # earlier editable work, retained
# redundant historical exports are retired
Editing and regeneration
UI artwork identifies the drawing masters and their consumers. Read the mandatory UI style guide before editing an icon. Edit SVG geometry and its command/UI assignments together; inspect both themes and small sizes. Temporary media and generated reports belong in ignored target/. Palettes and model presets are also editable Rust data.
The current macOS master is icons/app/macos/source/SolidCraft.icon/, including
its linked SVG layers and appearance settings. The earlier VectorCraft document
is preserved in the archive. No other native design projects were available for
the current UI set or preview card. Keep any future .vectorcraft, .ai or other
native work and linked inputs under that resource's source/work/, with an
attribution row; retain the editable document alongside its exports.
Regenerate all exports of the shared Windows/Linux/FreeBSD mark together:
cargo xtask app-icons
For macOS, use Xcode with Icon Composer support:
mkdir -p target/resources/macos-icon
xcrun actool assets/icons/app/macos/source/SolidCraft.icon \
--compile target/resources/macos-icon --platform macosx \
--minimum-deployment-target 11.0 --app-icon SolidCraft \
--output-partial-info-plist target/resources/macos-icon/icon-info.plist \
--output-format human-readable-text
cp target/resources/macos-icon/Assets.car assets/icons/app/macos/exports/Assets.car
cp target/resources/macos-icon/SolidCraft.icns assets/icons/app/macos/exports/icon.icns
Review and commit source changes and required exports together. Temporary renders,
tool caches and package staging belong under ignored target/ or dist/.
Normal builds use the committed exports and require no design applications.
The CLI still supports arbitrary PNG/ICO exports with solidcraft-cli icon.
Platform bindings
| Platform | Resources and output paths |
|---|---|
| macOS | Composer master and paired exports; bundle installs Assets.car and SolidCraft.icns |
| Windows executable | solidcraft-executable.ico: original DIB/mask representations at 16/24/32/48/64/128/256 px |
| Windows installer | solidcraft.ico: PNG representations at 16/20/24/32/40/48/64/128/256 px; SOLIDCRAFT_ICONS override retained |
| Linux, Nix, deb/rpm, tar, Flatpak, Snap | Copy canonical hicolor images; icon name stays ai.storyteller.solidcraft |
| AppImage | Uses the Linux 256 px image and .DirIcon alias |
| FreeBSD | Shares Linux hicolor images and freedesktop metadata |
| Web | HTML/Trunk and manifest.webmanifest stay in apps/solidcraft-web/; copies Japanese font/licence to fonts/, uses the collected CSS, and copies the Linux 32/256/512 px images to icons/ for the favicon and installed app |
| Docs and link previews | xtask book copies the shared card to the existing /solidcraft/og.png public path |
Code and provenance
Resources remain compiled by their owning layer through existing APIs:
ui-egui::icons::paint_icon and Tokens at L5, model presets in L2 doc, and sketch
fonts at L1. State, projection, interaction, commands and GPU bindings stay in
their current modules. Embedded data uses CARGO_MANIFEST_DIR; application code
needs no runtime resource registry or repository lookup.
cargo xtask assets requires an exact attribution row for every collected file
except Markdown documentation, and continues checking file assets elsewhere in
the repository. This includes native work, Rust masters, catalogs, shaders and
platform templates. Packaging selects explicit current files and fails when
required inputs are absent. Archived artwork has no production consumers.
Dependency-owned egui fonts and vendored renderer shaders stay with their
libraries; their licences remain in THIRD-PARTY-LICENSES.txt and ATTRIBUTION.md.
System fonts, optional packs, user fonts/canvases/decals/materials and native OS
controls retain external ownership. Root licence/notice texts stay canonical.