G5: built-in Inventory Icons symbol library

This commit is contained in:
Fabio William Conceição
2026-11-11 08:34:55 +00:00
parent b37241f5ae
commit 50bf4fc5a3
33 changed files with 274 additions and 16 deletions
+63
View File
@@ -158,6 +158,7 @@ pub const BUILTIN: &[BuiltinSymbolLibrary] = &[
BuiltinSymbolLibrary { id: "basic-shapes", name: "Basic Shapes", make: basic_shapes },
BuiltinSymbolLibrary { id: "ui-frames", name: "UI Frames", make: ui_frames },
BuiltinSymbolLibrary { id: "map-markers", name: "Map Markers", make: map_markers },
BuiltinSymbolLibrary { id: "inventory-icons", name: "Inventory Icons", make: inventory_icons },
];
/// Built-in library `id`, made once.
@@ -249,6 +250,68 @@ fn map_markers() -> SymbolLibrary {
SymbolLibrary { name: "Map Markers".into(), doc }
}
/// Inventory Icons: sword, shield, potion, key and gem for loot/RPG art (original, no 9-slice).
fn inventory_icons() -> SymbolLibrary {
let c = Point::ZERO;
let sword = [
(0.0, -22.0),
(3.0, -10.0),
(3.0, 6.0),
(8.0, 8.0),
(8.0, 12.0),
(3.0, 12.0),
(3.0, 20.0),
(-3.0, 20.0),
(-3.0, 12.0),
(-8.0, 12.0),
(-8.0, 8.0),
(-3.0, 6.0),
(-3.0, -10.0),
];
let shield = [(0.0, -20.0), (16.0, -12.0), (14.0, 8.0), (0.0, 20.0), (-14.0, 8.0), (-16.0, -12.0)];
let potion =
[(-4.0, -20.0), (4.0, -20.0), (4.0, -12.0), (10.0, -6.0), (12.0, 6.0), (8.0, 18.0), (-8.0, 18.0), (-12.0, 6.0), (-10.0, -6.0), (-4.0, -12.0)];
let key = [
(-4.0, -18.0),
(4.0, -18.0),
(6.0, -14.0),
(6.0, -8.0),
(4.0, -6.0),
(4.0, 16.0),
(8.0, 16.0),
(8.0, 20.0),
(-2.0, 20.0),
(-2.0, 12.0),
(0.0, 12.0),
(0.0, -6.0),
(-4.0, -8.0),
(-6.0, -14.0),
];
let sword: Vec<Point> = sword.iter().map(|&(x, y)| Point::new(x, y)).collect();
let shield: Vec<Point> = shield.iter().map(|&(x, y)| Point::new(x, y)).collect();
let potion: Vec<Point> = potion.iter().map(|&(x, y)| Point::new(x, y)).collect();
let key: Vec<Point> = key.iter().map(|&(x, y)| Point::new(x, y)).collect();
let icons = [
("Sword", vectorcraft_geom::PathData::single(vectorcraft_geom::SubPath::polyline(&sword, true)), "#95a5a6"),
("Shield", vectorcraft_geom::PathData::single(vectorcraft_geom::SubPath::polyline(&shield, true)), "#3498db"),
("Potion", vectorcraft_geom::PathData::single(vectorcraft_geom::SubPath::polyline(&potion, true)), "#9b59b6"),
("Key", vectorcraft_geom::PathData::single(vectorcraft_geom::SubPath::polyline(&key, true)), "#f1c40f"),
("Gem", shapes::polygon(c, 16.0, 6, 0.0), "#1abc9c"),
];
let mut doc = Document::new(100.0, 100.0);
for (name, path, hex) in icons {
let fill = Color::from_hex(hex).unwrap_or(Color::BLACK);
let edge = fill.lerp(&Color::BLACK, 0.35);
let id = doc.alloc_id();
let art = Node::path(id, path, Appearance::basic(Paint::solid(fill), Paint::solid(edge), 1.25));
let Ok((art, size, _)) = normalize(art) else { continue };
doc.symbols.push(Symbol { dynamic: false, name: name.into(), art: Arc::new(art) });
set_natural_size(&mut doc, name, Some(size));
}
doc.title = "Inventory Icons".into();
SymbolLibrary { name: "Inventory Icons".into(), doc }
}
/// An instance of symbol `name` (what the resource gathering follows).
fn instance(name: &str) -> Node {
Node::new(NodeId(0), NodeKind::SymbolInstance { symbol: name.into(), xf: Affine::IDENTITY })
+31 -1
View File
@@ -84,7 +84,7 @@ fn the_builtin_library_is_original_art_generated_in_code() {
let mut s = Session::new();
let list = run(&mut s, "symbol.libraries", json!({}));
let libs = list["libraries"].as_array().unwrap();
assert_eq!(libs.len(), 3, "{libs:?}");
assert_eq!(libs.len(), 4, "{libs:?}");
assert_eq!((libs[0]["id"].as_str(), libs[0]["category"].as_str()), (Some("basic-shapes"), Some("builtIn")));
assert_eq!(
(libs[1]["id"].as_str(), libs[1]["name"].as_str(), libs[1]["category"].as_str()),
@@ -94,6 +94,10 @@ fn the_builtin_library_is_original_art_generated_in_code() {
(libs[2]["id"].as_str(), libs[2]["name"].as_str(), libs[2]["category"].as_str()),
(Some("map-markers"), Some("Map Markers"), Some("builtIn"))
);
assert_eq!(
(libs[3]["id"].as_str(), libs[3]["name"].as_str(), libs[3]["category"].as_str()),
(Some("inventory-icons"), Some("Inventory Icons"), Some("builtIn"))
);
let lib = run(&mut s, "symbol.library", json!({"library": "basic shapes"}));
let names: Vec<&str> = lib["symbols"].as_array().unwrap().iter().map(|x| x["name"].as_str().unwrap()).collect();
assert_eq!(names, ["Circle", "Square", "Rounded Square", "Triangle", "Diamond", "Hexagon", "Star", "Burst", "Arrow"]);
@@ -129,6 +133,32 @@ fn ui_frames_symbols_carry_default_nine_slice_when_added() {
));
}
#[test]
fn inventory_icons_symbols_add_without_nine_slice() {
let mut s = session();
let lib = run(&mut s, "symbol.library", json!({"library": "inventory-icons"}));
let names: Vec<&str> = lib["symbols"].as_array().unwrap().iter().map(|x| x["name"].as_str().unwrap()).collect();
assert_eq!(names, ["Sword", "Shield", "Potion", "Key", "Gem"]);
let mut placed = Vec::new();
for (i, name) in names.iter().enumerate() {
let r = run(
&mut s,
"symbol.addFromLibrary",
json!({"library": "inventory-icons", "name": name, "place": true, "x": 100.0 + 80.0 * i as f64, "y": 100.0}),
);
assert_eq!(r["added"], json!([name]));
placed.push(r["placed"].as_u64().unwrap());
}
let d = doc(&s);
for name in &names {
assert_eq!(d.symbol_nine_slice(name), None, "{name} should not carry 9-slice guides");
}
assert!(matches!(
d.node(NodeId(placed[0])).map(|n| &n.kind),
Some(NodeKind::SymbolInstance { symbol, .. }) if symbol == "Sword"
));
}
#[test]
fn map_markers_symbols_add_without_nine_slice() {
let mut s = session();
+6
View File
@@ -5891,6 +5891,12 @@ axis Y Axis Y ос
Flag Флаг
Crosshair Мерник
Checkpoint Контролна точка
Inventory Icons Икони на инвентара
Sword Меч
Shield Щит
Potion Отвара
Key Ключ
Gem Скъпоценен камък
Open Symbol Library Отваряне на библиотека със символи
Save Symbol Library Запазване на библиотека със символи
Save Symbol Library… Запази библиотека със символи…
Can't render this file because it contains an unexpected character in line 2 and column 73.
+6
View File
@@ -5935,6 +5935,12 @@ axis Y Axis Y osa
Flag Zastava
Crosshair Nišan
Checkpoint Kontrolna tačka
Inventory Icons Ikone inventara
Sword Mač
Shield Štit
Potion Napitak
Key Ključ
Gem Dragulj
Open Symbol Library Otvori biblioteku simbola
Save Symbol Library Sačuvaj biblioteku simbola
Save Symbol Library… Sačuvaj biblioteku simbola…
Can't render this file because it contains an unexpected character in line 2 and column 73.
+6
View File
@@ -455,6 +455,12 @@ antiAlias Sharp Nítid
Flag Bandera
Crosshair Punt de mira
Checkpoint Punt de control
Inventory Icons Icones d’inventari
Sword Espasa
Shield Escut
Potion Poció
Key Clau
Gem Gemm
Batch Lot
Batch… Lot…
Bearing Orientació
Can't render this file because it contains an unexpected character in line 2 and column 73.
+6
View File
@@ -6119,6 +6119,12 @@ axis Y Axis osa Y
Flag Vlajka
Crosshair Zaměřovač
Checkpoint Kontrolní bod
Inventory Icons Ikony inventáře
Sword Meč
Shield Štít
Potion Lektvar
Key Klíč
Gem Drahokam
Open Symbol Library Otevřít knihovnu symbolů
Save Symbol Library Uložit knihovnu symbolů
Save Symbol Library… Uložit knihovnu symbolů…
Can't render this file because it contains an unexpected character in line 2 and column 73.
+6
View File
@@ -5906,6 +5906,12 @@ axis Y Axis Y-akse
Flag Flag
Crosshair Sigtekorn
Checkpoint Kontrolpunkt
Inventory Icons Inventarikoner
Sword Sværd
Shield Skjold
Potion Eliksir
Key Nøgle
Gem Ædelsten
Open Symbol Library Åbn symbolbibliotek
Save Symbol Library Gem symbolbibliotek
Save Symbol Library… Gem symbolbibliotek…
Can't render this file because it contains an unexpected character in line 2 and column 73.
+6
View File
@@ -5702,6 +5702,12 @@ axis Y Axis Y-Achse
Flag Flagge
Crosshair Fadenkreuz
Checkpoint Kontrollpunkt
Inventory Icons Inventar-Symbole
Sword Schwert
Shield Schild
Potion Trank
Key Schlüssel
Gem Edelstein
Open Symbol Library Symbol-Bibliothek öffnen
Save Symbol Library Symbol-Bibliothek speichern
Save Symbol Library… Symbol-Bibliothek speichern…
Can't render this file because it contains an unexpected character in line 2 and column 73.
+6
View File
@@ -6070,6 +6070,12 @@ axis Y Axis Άξονας Y
Flag Σημαία
Crosshair Σταυρόνημα
Checkpoint Σημείο ελέγχου
Inventory Icons Εικονίδια αποθέματος
Sword Ξίφος
Shield Ασπίδα
Potion Φίλτρο
Key Κλειδί
Gem Πετράδι
Open Symbol Library Άνοιγμα βιβλιοθήκης συμβόλων
Save Symbol Library Αποθήκευση βιβλιοθήκης συμβόλων
Save Symbol Library… Αποθήκευση βιβλιοθήκης συμβόλων…
Can't render this file because it is too large.
+6
View File
@@ -6061,6 +6061,12 @@ axis Y Axis Eje Y
Flag Bandera
Crosshair Punto de mira
Checkpoint Punto de control
Inventory Icons Iconos de inventario
Sword Espada
Shield Escudo
Potion Poción
Key Llave
Gem Gema
Open Symbol Library Abrir biblioteca de símbolos
Save Symbol Library Guardar biblioteca de símbolos
Save Symbol Library… Guardar biblioteca de símbolos…
Can't render this file because it contains an unexpected character in line 2 and column 73.
+6
View File
@@ -6149,6 +6149,12 @@ axis Y Axis Y-akseli
Flag Lippu
Crosshair Tähtäin
Checkpoint Tarkastuskohta
Inventory Icons Inventaarioikonit
Sword Miekka
Shield Kilpi
Potion Taikajuoma
Key Avain
Gem Jalokivi
Open Symbol Library Avaa symbolikirjasto
Save Symbol Library Tallenna symbolikirjasto
Save Symbol Library… Tallenna symbolikirjasto…
Can't render this file because it contains an unexpected character in line 2 and column 73.
+6
View File
@@ -6114,6 +6114,12 @@ axis Y Axis Axe Y
Flag Drapeau
Crosshair Réticule
Checkpoint Point de contrôle
Inventory Icons Icônes d’inventaire
Sword Épée
Shield Bouclier
Potion Potion
Key Clé
Gem Gemme
Open Symbol Library Ouvrir une bibliothèque de symboles
Save Symbol Library Enregistrer la bibliothèque de symboles
Save Symbol Library… Enregistrer la bibliothèque de symboles…
Can't render this file because it contains an unexpected character in line 2 and column 73.
+6
View File
@@ -526,6 +526,12 @@ antiAlias Sharp शार्प
Flag झंडा
Crosshair क्रॉसहेयर
Checkpoint चेकपॉइंट
Inventory Icons इन्वेंटरी आइकन
Sword तलवार
Shield ढाल
Potion औषधि
Key कुंजी
Gem रत्न
Batch बैच
Batch Trace Folder फ़ोल्डर बैच ट्रेस करें
Batch… बैच…
Can't render this file because it is too large.
+6
View File
@@ -6102,6 +6102,12 @@ axis Y Axis Y tengely
Flag Zászló
Crosshair Célkereszt
Checkpoint Ellenőrzőpont
Inventory Icons Leltári ikonok
Sword Kard
Shield Pajzs
Potion Bájital
Key Kulcs
Gem Drágakő
Open Symbol Library Szimbólumkönyvtár megnyitása
Save Symbol Library Szimbólumkönyvtár mentése
Save Symbol Library… Szimbólumkönyvtár mentése…
Can't render this file because it contains an unexpected character in line 2 and column 73.
+6
View File
@@ -5906,6 +5906,12 @@ axis Y Axis Sumbu Y
Flag Bendera
Crosshair Bidik silang
Checkpoint Pos pemeriksaan
Inventory Icons Ikon Inventaris
Sword Pedang
Shield Perisai
Potion Ramuan
Key Kunci
Gem Permata
Open Symbol Library Buka pustaka simbol
Save Symbol Library Simpan pustaka simbol
Save Symbol Library… Simpan pustaka simbol…
Can't render this file because it contains an unexpected character in line 2320 and column 5.
+6
View File
@@ -5736,6 +5736,12 @@ axis Y Axis Asse Y
Flag Bandiera
Crosshair Mirino
Checkpoint Punto di controllo
Inventory Icons Icone inventario
Sword Spada
Shield Scudo
Potion Pozione
Key Chiave
Gem Gemma
Open Symbol Library Apri libreria simboli
Save Symbol Library Salva libreria simboli
Save Symbol Library… Salva libreria simboli…
Can't render this file because it contains an unexpected character in line 2 and column 73.
+6
View File
@@ -5801,6 +5801,12 @@ axis Y Axis Y 軸
Flag 旗
Crosshair クロスヘア
Checkpoint チェックポイント
Inventory Icons インベントリアイコン
Sword 剣
Shield 盾
Potion ポーション
Key 鍵
Gem 宝石
Open Symbol Library シンボルライブラリを開く
Save Symbol Library シンボルライブラリを保存
Save Symbol Library… シンボルライブラリを保存…
Can't render this file because it contains an unexpected character in line 2 and column 73.
+6
View File
@@ -6042,6 +6042,12 @@ axis Y Axis Y ღერძი
Flag დროშა
Crosshair სამიზნე
Checkpoint საკონტროლო წერტილი
Inventory Icons ინვენტარის ხატულები
Sword მახვილი
Shield ფარი
Potion წამალი
Key გასაღები
Gem ძვირფასი ქვა
Open Symbol Library სიმბოლოების ბიბლიოთეკის გახსნა
Save Symbol Library სიმბოლოების ბიბლიოთეკის შენახვა
Save Symbol Library… სიმბოლოების ბიბლიოთეკის შენახვა…
Can't render this file because it is too large.
+6
View File
@@ -5697,6 +5697,12 @@ axis Y Axis Y축
Flag 깃발
Crosshair 십자선
Checkpoint 체크포인트
Inventory Icons 인벤토리 아이콘
Sword 검
Shield 방패
Potion 포션
Key 열쇠
Gem 보석
Open Symbol Library 심볼 라이브러리 열기
Save Symbol Library 심볼 라이브러리 저장
Save Symbol Library… 심볼 라이브러리 저장…
Can't render this file because it contains an unexpected character in line 2 and column 73.
+6
View File
@@ -5957,6 +5957,12 @@ axis Y Axis Y-as
Flag Vlag
Crosshair Vizier
Checkpoint Controlepunt
Inventory Icons Inventarisiconen
Sword Zwaard
Shield Schild
Potion Drank
Key Sleutel
Gem Edelsteen
Open Symbol Library Symboolbibliotheek openen
Save Symbol Library Symboolbibliotheek opslaan
Save Symbol Library… Symboolbibliotheek opslaan…
Can't render this file because it contains an unexpected character in line 2 and column 73.
+6
View File
@@ -5973,6 +5973,12 @@ axis Y Axis Oś Y
Flag Flaga
Crosshair Celownik
Checkpoint Punkt kontrolny
Inventory Icons Ikony ekwipunku
Sword Miecz
Shield Tarcza
Potion Mikstura
Key Klucz
Gem Klejnot
Open Symbol Library Otwórz bibliotekę symboli
Save Symbol Library Zapisz bibliotekę symboli
Save Symbol Library… Zapisz bibliotekę symboli…
Can't render this file because it contains an unexpected character in line 2 and column 73.
+6
View File
@@ -6034,6 +6034,12 @@ axis Y Axis Eixo Y
Flag Bandeira
Crosshair Mira
Checkpoint Ponto de verificação
Inventory Icons Ícones de inventário
Sword Espada
Shield Escudo
Potion Poção
Key Chave
Gem Gema
Open Symbol Library Abrir Biblioteca de Símbolos
Save Symbol Library Salvar Biblioteca de Símbolos
Save Symbol Library… Salvar Biblioteca de Símbolos…
Can't render this file because it contains an unexpected character in line 6 and column 47.
+6
View File
@@ -5730,6 +5730,12 @@ axis Y Axis Ось Y
Flag Флаг
Crosshair Прицел
Checkpoint Контрольная точка
Inventory Icons Иконки инвентаря
Sword Меч
Shield Щит
Potion Зелье
Key Ключ
Gem Самоцвет
Open Symbol Library Открыть библиотеку символов
Save Symbol Library Сохранить библиотеку символов
Save Symbol Library… Сохранить библиотеку символов…
Can't render this file because it is too large.
+6
View File
@@ -6142,6 +6142,12 @@ axis Y Axis Y-axel
Flag Flagga
Crosshair Hårkors
Checkpoint Kontrollpunkt
Inventory Icons Inventarieikoner
Sword Svärd
Shield Sköld
Potion Dryck
Key Nyckel
Gem Ädelsten
Open Symbol Library Öppna symbolbibliotek
Save Symbol Library Spara symbolbibliotek
Save Symbol Library… Spara symbolbibliotek…
Can't render this file because it contains an unexpected character in line 5 and column 25.
+6
View File
@@ -6075,6 +6075,12 @@ axis Y Axis Y ekseni
Flag Bayrak
Crosshair Nişangah
Checkpoint Kontrol noktası
Inventory Icons Envanter Simgeleri
Sword Kılıç
Shield Kalkan
Potion İksir
Key Anahtar
Gem Mücevher
Open Symbol Library Sembol Kitaplığını Aç
Save Symbol Library Sembol Kitaplığını Kaydet
Save Symbol Library… Sembol Kitaplığını Kaydet…
Can't render this file because it contains an unexpected character in line 5 and column 25.
+6
View File
@@ -5716,6 +5716,12 @@ axis Y Axis Вісь Y
Flag Прапор
Crosshair Приціл
Checkpoint Контрольна точка
Inventory Icons Піктограми інвентарю
Sword Меч
Shield Щит
Potion Зілля
Key Ключ
Gem Самоцвіт
Open Symbol Library Відкрити бібліотеку символів
Save Symbol Library Зберегти бібліотеку символів
Save Symbol Library… Зберегти бібліотеку символів…
Can't render this file because it contains an unexpected character in line 182 and column 5.
+6
View File
@@ -5717,6 +5717,12 @@ axis Y Axis Trục Y
Flag Cờ
Crosshair Tâm ngắm
Checkpoint Điểm kiểm tra
Inventory Icons Biểu tượng túi đồ
Sword Kiếm
Shield Khiên
Potion Thuốc
Key Chìa khóa
Gem Ngọc
Open Symbol Library Mở thư viện ký hiệu
Save Symbol Library Lưu thư viện ký hiệu
Save Symbol Library… Lưu thư viện ký hiệu…
Can't render this file because it contains an unexpected character in line 204 and column 5.
+6
View File
@@ -5957,6 +5957,12 @@ axis Y Axis Y 轴
Flag 旗帜
Crosshair 准星
Checkpoint 检查点
Inventory Icons 物品栏图标
Sword 剑
Shield 盾
Potion 药水
Key 钥匙
Gem 宝石
Open Symbol Library 打开符号库
Save Symbol Library 保存符号库
Save Symbol Library… 保存符号库…
Can't render this file because it contains an unexpected character in line 2 and column 73.
+6
View File
@@ -5754,6 +5754,12 @@ axis Y Axis Y 軸
Flag 旗幟
Crosshair 準星
Checkpoint 檢查點
Inventory Icons 物品欄圖示
Sword 劍
Shield 盾
Potion 藥水
Key 鑰匙
Gem 寶石
Open Symbol Library 開啟符號資料庫
Save Symbol Library 儲存符號資料庫
Save Symbol Library… 儲存符號資料庫…
Can't render this file because it contains an unexpected character in line 6 and column 47.
@@ -113,7 +113,7 @@ fn the_window_menu_and_the_symbols_panel_open_symbol_libraries() {
let under = |e: &crate::menus::MenuEntry| e.path == ["Window", "Symbol Libraries"];
let opened: Vec<_> =
entries.iter().filter(|e| under(e) && e.command.as_deref() == Some("window.symbolLibrary")).map(|e| e.params["library"].clone()).collect();
assert_eq!(opened, [json!("basic-shapes"), json!("ui-frames"), json!("map-markers")]);
assert_eq!(opened, [json!("basic-shapes"), json!("ui-frames"), json!("map-markers"), json!("inventory-icons")]);
let has = |cmd: &str| entries.iter().find(|e| under(e) && e.command.as_deref() == Some(cmd)).map(|e| e.enabled);
assert_eq!(has("window.symbolLibrary.other"), Some(true));
assert_eq!(has("ui.saveSymbolLibrary"), Some(false), "no symbols to save yet");
+7 -6
View File
@@ -1,6 +1,6 @@
# Gaps
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-11-10 · **Change:** minor (G9: `.ai` save names a variable font instance's design-space setting, #6388; previously minor: G5: built-in Game Trails brush library; estimate 9–19 → 8–18 h; previously minor: Edit › Edit Custom Dictionary…: its dialog adds, deletes and changes the custom dictionary's words, #4936; previously minor: docs tidy-up, no content change: stray notes at the top moved into the revision table; scores and estimates unchanged; previously minor: G5: built-in Game HUD graphic style library; estimate 10–20 → 9–19 h; previously minor: G5: built-in Map Markers symbol library; estimate 11–21 → 10–20 h; previously minor: right-click on type: Spelling › Auto Spell Check, with its check mark, #4936; previously minor: right-click on a word Auto Spell Check underlined: its suggestions, Ignore All and Add to Dictionary, #4936; previously minor: G2: Effect Gallery thumbnails and in-dialog preview; estimate 1–2 h → 0; Auto Spell Check: `edit.autoSpellCheck` underlines the unknown words, #4936; previously minor: PDF editable import preserves authored ActualText once, including empty/nested spans and authored ordering (#6165); cross-line/style layout remains approximate; scores and estimates unchanged; PDF marked-text export (#6309): compatible glyphs stay on one layout line with per-glyph offsets; scores and estimates unchanged; G5: built-in UI Frames symbol library with default 9-slice; estimate 11–21 h; previously minor: G5: dynamic symbol part on-canvas takes opacity, blend, gradient and pattern; docs Overlap/auto-corners sync; estimate 12–22 h; previously minor: interim macOS cursor delivery, #2292; native validation pending; scores and estimates unchanged; previously minor: Control bar › Snapping includes the existing Snap to Glyph and Alignment Guides toggles (#6164); scores and estimates unchanged; previously minor: G5 docs: Art brush Overlap, Pattern brush auto corners and Global Edit Shift-click leave-out moved from Missing to Done (code already shipped); previously minor: custom dictionary and Ignore All: `text.spelling.addWord`, `removeWord`, `changeWord`, `dictionary` and `ignoreAll`, #4936; previously minor: EPS import: embedded fonts (composite, Type 42, CID-keyed, Type 1, CFF FontSet) draw their glyphs; spell check engine: `text.spelling.check` and `text.spelling.suggest` on craft-proof, #4936; previously minor: floating tab groups collapse into the side icon rail and opened rail panels fold back into it, #5925 in part; G9: EPS gradients drawn as abutting strips import as one gradient, without seams; Tools stays beside the canvas with left-side panels; new gradients follow document color mode; Selection QoL: marquee modes and visible feedback, #5313; #3380 deletion-only review follow-up: independent survivors keep gradient placement, owned subpaths avoid discarded copies, and contracts/status/evidence are clarified; endpoint highlighting remains open; scores and estimates unchanged; Indian-language hyphenation review and license allowlist, #4947; opening a slow file shows a progress window, part of #5930; Hindi catalog and contributor loanword preferences; agent wording pass complete; wider native proofreading welcome; an image zoomed in on is separated, colorized or proofed only where it shows (#4155); scores and estimates unchanged; a document's first frame renders on the render worker, so opening a heavy file no longer freezes the window; scores and estimates unchanged; large images in CMYK documents are shrunk before they are separated into ink planes (#4155); scores and estimates unchanged; `.ai` paths with a Calligraphic brush open brushed, with the 6D Art Pen's channels, and Windows reads the pen's tilt and barrel rotation, #372; scores and estimates unchanged; Compound Shapes add-on, beyond Illustrator; scores and estimates unchanged; Contour add-on, beyond Illustrator; scores and estimates unchanged; a slow first frame is waited for instead of restarting without the graphics adapter, and the menu bar no longer waits for the installed fonts' scan; scores and estimates unchanged) · **Target:** Adobe Illustrator 2026 (30.x)
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-11-10 · **Change:** minor (G5: built-in Inventory Icons symbol library; estimate 8–18 → 7–17 h; previously minor: G9: `.ai` save names a variable font instance's design-space setting, #6388; previously minor: G5: built-in Game Trails brush library; estimate 9–19 → 8–18 h; previously minor: Edit › Edit Custom Dictionary…: its dialog adds, deletes and changes the custom dictionary's words, #4936; previously minor: docs tidy-up, no content change: stray notes at the top moved into the revision table; scores and estimates unchanged; previously minor: G5: built-in Game HUD graphic style library; estimate 10–20 → 9–19 h; previously minor: G5: built-in Map Markers symbol library; estimate 11–21 → 10–20 h; previously minor: right-click on type: Spelling › Auto Spell Check, with its check mark, #4936; previously minor: right-click on a word Auto Spell Check underlined: its suggestions, Ignore All and Add to Dictionary, #4936; previously minor: G2: Effect Gallery thumbnails and in-dialog preview; estimate 1–2 h → 0; Auto Spell Check: `edit.autoSpellCheck` underlines the unknown words, #4936; previously minor: PDF editable import preserves authored ActualText once, including empty/nested spans and authored ordering (#6165); cross-line/style layout remains approximate; scores and estimates unchanged; PDF marked-text export (#6309): compatible glyphs stay on one layout line with per-glyph offsets; scores and estimates unchanged; G5: built-in UI Frames symbol library with default 9-slice; estimate 11–21 h; previously minor: G5: dynamic symbol part on-canvas takes opacity, blend, gradient and pattern; docs Overlap/auto-corners sync; estimate 12–22 h; previously minor: interim macOS cursor delivery, #2292; native validation pending; scores and estimates unchanged; previously minor: Control bar › Snapping includes the existing Snap to Glyph and Alignment Guides toggles (#6164); scores and estimates unchanged; previously minor: G5 docs: Art brush Overlap, Pattern brush auto corners and Global Edit Shift-click leave-out moved from Missing to Done (code already shipped); previously minor: custom dictionary and Ignore All: `text.spelling.addWord`, `removeWord`, `changeWord`, `dictionary` and `ignoreAll`, #4936; previously minor: EPS import: embedded fonts (composite, Type 42, CID-keyed, Type 1, CFF FontSet) draw their glyphs; spell check engine: `text.spelling.check` and `text.spelling.suggest` on craft-proof, #4936; previously minor: floating tab groups collapse into the side icon rail and opened rail panels fold back into it, #5925 in part; G9: EPS gradients drawn as abutting strips import as one gradient, without seams; Tools stays beside the canvas with left-side panels; new gradients follow document color mode; Selection QoL: marquee modes and visible feedback, #5313; #3380 deletion-only review follow-up: independent survivors keep gradient placement, owned subpaths avoid discarded copies, and contracts/status/evidence are clarified; endpoint highlighting remains open; scores and estimates unchanged; Indian-language hyphenation review and license allowlist, #4947; opening a slow file shows a progress window, part of #5930; Hindi catalog and contributor loanword preferences; agent wording pass complete; wider native proofreading welcome; an image zoomed in on is separated, colorized or proofed only where it shows (#4155); scores and estimates unchanged; a document's first frame renders on the render worker, so opening a heavy file no longer freezes the window; scores and estimates unchanged; large images in CMYK documents are shrunk before they are separated into ink planes (#4155); scores and estimates unchanged; `.ai` paths with a Calligraphic brush open brushed, with the 6D Art Pen's channels, and Windows reads the pen's tilt and barrel rotation, #372; scores and estimates unchanged; Compound Shapes add-on, beyond Illustrator; scores and estimates unchanged; Contour add-on, beyond Illustrator; scores and estimates unchanged; a slow first frame is waited for instead of restarting without the graphics adapter, and the menu bar no longer waits for the installed fonts' scan; scores and estimates unchanged) · **Target:** Adobe Illustrator 2026 (30.x)
## Feature submission evidence
@@ -622,9 +622,9 @@ macOS cursor delivery (#2292) is narrowed to a native host adapter using the exi
symbol static drops them; stored in the native format.
Color eyedropper for scatter, art and pattern brushes (Hue Shift colorization; samples canvas art);
symbol libraries ([public source](https://helpx.adobe.com/illustrator/desktop/manage-objects/traces-mockups-symbols/create-or-import-symbol-libraries.html)): Window › Symbol Libraries and the Symbols panel's Symbol
Libraries Menu open each library in a library panel of its own (three original libraries generated in code,
Basic Shapes, UI Frames with default 9-slice guides on Panel, Button and Bar, and Map Markers with Pin,
Flag, Crosshair and Checkpoint; User Defined; Other
Libraries Menu open each library in a library panel of its own (four original libraries generated in code,
Basic Shapes, UI Frames with default 9-slice guides on Panel, Button and Bar, Map Markers with Pin,
Flag, Crosshair and Checkpoint, and Inventory Icons with Sword, Shield, Potion, Key and Gem; User Defined; Other
Library… reads the symbols of any document VectorCraft opens); a click
adds a symbol to the document's Symbols with its Symbol Options and the resources it uses, as one undo
step, and dragging one onto the canvas also places it; Save Symbols / Save Symbol Library writes the
@@ -652,10 +652,10 @@ macOS cursor delivery (#2292) is narrowed to a native host adapter using the exi
Game HUD with Health Fill, Mana Glow, Damage Flash, Quest Outline, Coin Shine and Boss Alert; User Defined; Other
Library…; `graphicStyle.libraries`, `graphicStyle.addFromLibrary`).
- **Missing:** more built-in brush libraries beyond the five shipped (and further graphic-style libraries beyond the seven shipped, and further symbol libraries beyond Basic
Shapes, UI Frames and Map Markers; original, generated in code, never Adobe's); dynamic symbols' `.ai` read and write;
Shapes, UI Frames, Map Markers and Inventory Icons; original, generated in code, never Adobe's); dynamic symbols' `.ai` read and write;
Global Edit of groups holding type or images, rotated copies as matches and highlighting matches before the
start; 9-slice guides outside the symbol's art (a dragged guide stops at the art's edge).
- **Estimate:** 8–18 h.
- **Estimate:** 7–17 h.
## G3 3D and Materials
@@ -854,6 +854,7 @@ trap, and the defaults (0.25 pt, 100%, 40%) are VectorCraft's own, the pages giv
| Date | Change | Summary |
|---|---|---|
| 2026-11-11 | minor | G5: built-in Inventory Icons symbol library (Sword, Shield, Potion, Key, Gem; no default 9-slice); Missing trimmed; estimate 8–18 → 7–17 h. |
| 2026-11-10 | minor | G4 type: Edit › Edit Custom Dictionary… adds, deletes and changes the custom dictionary's words, #4936; the Check Spelling dialog remains; scores and estimates unchanged. |
| 2026-11-10 | minor | Tidy-up, no content change: in Feature submission evidence, a stray table row and two "PR #NNNN revision" notes move into Feature revisions, the three "Feature evidence last updated" lines become one, the duplicate Flyout update note goes (its row stays), and eight reconciliation rows become two. Scores and estimates unchanged. |
| 2026-11-10 | minor | G5: built-in Game HUD graphic style library (Health Fill, Mana Glow, Damage Flash, Quest Outline, Coin Shine, Boss Alert); Missing trimmed; estimate 10–20 → 9–19 h. |
+3 -2
View File
@@ -1,6 +1,6 @@
# Roadmap: milestones and what's next
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-11-10 · **Change:** minor (Edit › Edit Custom Dictionary…: its dialog adds, deletes and changes the custom dictionary's words, #4936; previously minor: M10/G5: Game HUD graphic style library; previously minor: resizable icon-strip flyouts and bottom-aligned panel footers, #5713; previously minor: M10/G5: Map Markers built-in symbol library; previously minor: right-click on type: Spelling › Auto Spell Check, with its check mark, #4936; previously minor: right-click on a word Auto Spell Check underlined: its suggestions, Ignore All and Add to Dictionary, #4936; previously minor: G2: Effect Gallery thumbnails and in-dialog preview are in; Auto Spell Check: `edit.autoSpellCheck` underlines the unknown words, #4936; previously minor: PDF editable import preserves authored ActualText once, including empty/nested spans and authored ordering (#6165); cross-line/style layout remains approximate; scores and estimates unchanged; PDF marked-text export (#6309): compatible glyphs stay on one layout line with per-glyph offsets; scores and estimates unchanged; interim macOS cursor delivery, #2292; native validation pending; scores and estimates unchanged; Control bar › Snapping includes the existing Snap to Glyph and Alignment Guides toggles (#6164); scores and estimates unchanged; custom dictionary and Ignore All: `text.spelling.addWord`, `removeWord`, `changeWord`, `dictionary` and `ignoreAll`, #4936; previously minor: EPS import: embedded fonts (composite, Type 42, CID-keyed, Type 1, CFF FontSet) draw their glyphs; spell check engine: `text.spelling.check` and `text.spelling.suggest` on craft-proof, #4936; previously minor: floating tab groups collapse into the side icon rail and opened rail panels fold back into it, #5925 in part; M4/M7: `.ai`/EPS type keeps its tab stops, and right-aligned lines with tabs lay out as the file's page, #6147; M4/M7: `.ai`/EPS type from the text document lays its lines out closer to the file's page, within limits, #6137; numeric fields step on wheel hover without taking keyboard focus, #5949; Character Styles panel: a double-click on a style's row opens its Character Style Options; the dialog keeps a fixed width and scrolls its sections, so its buttons stay on screen; Selection QoL: marquee modes and visible feedback, #5313; SVG CSS classes survive export and repeated import in all four styling modes (#2480); current-main integration retains event attributes and scripts; #3380 deletion-only review follow-up: independent survivors keep gradient placement, owned subpaths avoid discarded copies, and contracts/status/evidence are clarified; endpoint highlighting remains open; scores and estimates unchanged; Indian-language hyphenation review and license allowlist, #4947; Hindi catalog and contributor loanword preferences; full wording review in progress; Effect dialogs: a colour swatch beside a hex colour opens the Color Picker, #5365; shape tools move the selection from its centre point and turn it from the zone outside a box corner, #5477; scores and estimates unchanged) · **Target:** Adobe Illustrator 2026 (30.x)
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-11-10 · **Change:** minor (M10/G5: Inventory Icons built-in symbol library; previously minor: Edit › Edit Custom Dictionary…: its dialog adds, deletes and changes the custom dictionary's words, #4936; previously minor: M10/G5: Game HUD graphic style library; previously minor: resizable icon-strip flyouts and bottom-aligned panel footers, #5713; previously minor: M10/G5: Map Markers built-in symbol library; previously minor: right-click on type: Spelling › Auto Spell Check, with its check mark, #4936; previously minor: right-click on a word Auto Spell Check underlined: its suggestions, Ignore All and Add to Dictionary, #4936; previously minor: G2: Effect Gallery thumbnails and in-dialog preview are in; Auto Spell Check: `edit.autoSpellCheck` underlines the unknown words, #4936; previously minor: PDF editable import preserves authored ActualText once, including empty/nested spans and authored ordering (#6165); cross-line/style layout remains approximate; scores and estimates unchanged; PDF marked-text export (#6309): compatible glyphs stay on one layout line with per-glyph offsets; scores and estimates unchanged; interim macOS cursor delivery, #2292; native validation pending; scores and estimates unchanged; Control bar › Snapping includes the existing Snap to Glyph and Alignment Guides toggles (#6164); scores and estimates unchanged; custom dictionary and Ignore All: `text.spelling.addWord`, `removeWord`, `changeWord`, `dictionary` and `ignoreAll`, #4936; previously minor: EPS import: embedded fonts (composite, Type 42, CID-keyed, Type 1, CFF FontSet) draw their glyphs; spell check engine: `text.spelling.check` and `text.spelling.suggest` on craft-proof, #4936; previously minor: floating tab groups collapse into the side icon rail and opened rail panels fold back into it, #5925 in part; M4/M7: `.ai`/EPS type keeps its tab stops, and right-aligned lines with tabs lay out as the file's page, #6147; M4/M7: `.ai`/EPS type from the text document lays its lines out closer to the file's page, within limits, #6137; numeric fields step on wheel hover without taking keyboard focus, #5949; Character Styles panel: a double-click on a style's row opens its Character Style Options; the dialog keeps a fixed width and scrolls its sections, so its buttons stay on screen; Selection QoL: marquee modes and visible feedback, #5313; SVG CSS classes survive export and repeated import in all four styling modes (#2480); current-main integration retains event attributes and scripts; #3380 deletion-only review follow-up: independent survivors keep gradient placement, owned subpaths avoid discarded copies, and contracts/status/evidence are clarified; endpoint highlighting remains open; scores and estimates unchanged; Indian-language hyphenation review and license allowlist, #4947; Hindi catalog and contributor loanword preferences; full wording review in progress; Effect dialogs: a colour swatch beside a hex colour opens the Color Picker, #5365; shape tools move the selection from its centre point and turn it from the zone outside a box corner, #5477; scores and estimates unchanged) · **Target:** Adobe Illustrator 2026 (30.x)
>
> Vector Halftone preview update (2026-11-10): temporary dot selection marks are hidden, and the bounding box stays available (#6369).
>
@@ -148,7 +148,7 @@ native wording review, layout checks and a web Devanagari font remain. [Notes](l
| M7 | Type (point/area/path, editing, styles, OpenType, threading, glyphs) | Spell check engine: `text.spelling.check` and `text.spelling.suggest` on craft-proof and the custom dictionary and Ignore All commands and Auto Spell Check with its right-click suggestions, Ignore All and Add to Dictionary, and Spelling › Auto Spell Check in the context menu of type, and the Edit Custom Dictionary dialog (#4936; the Check Spelling dialog remains); Right-aligned area type sets the text after a line's last tab against the right edge, the text before it at its stops (#6147); A line a soft return ends is justified as a wrapped line is (#6137); Indian-language pattern hyphenation preserves syllables in both composers (#4947); 🟡 Hanging punctuation keeps its published amounts under Glyph Scaling, and Standard burasagari counts a hung line start as room; Fullwidth `!` / `?` keep an upright fallback in vertical type; Hyphenation… and Justification… per paragraph (#2310, #2755), Auto Leading also driving the Character panel's Leading, the Alt+↑/↓ leading nudge and Fill with Placeholder Text; Document-point character controls after object/group scaling (#1034; optional font-size preservation remains separate), Character/Paragraph Styles (explicit Auto-leading resets and local leading overrides), per-paragraph paragraph attributes, mixed paragraph alignment indication (headless regressions, full integration CI and visual review pass), Area Type Options (with Width/Height, Auto Size and Shrink Text to Fit; overflow reported to agents and vertical Align), type areas resized by their handles and reshaped with Direct Selection, threaded text, Fit Headline, Glyphs, OpenType panel (including font-defined Stylistic Sets), Find Font (Document, Recent and System replacement sources, #5217), installed system fonts in every font menu (fonts registered with Windows outside its font folders, the XDG and Flatpak host font folders on Linux, and fonts installed while the app runs, listed when it comes back to the front; searchable; the Character and Properties menus show each family's sample of the selected text, preview it live under the pointer or ↑/↓, show recently applied families first (#3515), filter by script and kind, list a family's styles, and star favourites; the Glyphs panel and Find Font's Replace With use the same menu without the live preview) and found by name on open/import (full-name aliases and Missing Fonts searches verified, #1258; Windows font-service QA pending), variable fonts' named instances as styles, CJK names in the UI, input methods (marked text in place, candidate window at the caret; Japanese IME), Text Wrap (offset, invert, both sides of an object; follows edits), Type on a Path effects and Options with draggable start/centre/end brackets (slide, flip), tab stops + Tabs panel (Above Text floats it over the selected text, its ruler at the canvas zoom so stops line up with the columns, #729), inline symbols in text (beyond parity), Hebrew/Arabic bidirectional text, Paragraph Direction, Every-line/Single-line Composer per object (ragged text too) done; paint-only Arabic harakat keep joining with GDEF-mark ownership and Insert Kashidas tatweels on the base letter's paint (`tests::harakat`); tab leaders, spell check, vertical type pending | 45–60 |
| M8 | Transform & distort (Puppet Warp, Liquify tools, Envelopes, Blends, Perspective Grid) | ✅ done (M8.1–M8.20 on 2026-10-06, fidelity pass): Liquify Tool Options with one shared brush, pen pressure, hold-to-apply, a safe scope and incremental strokes; tool options that last; Puppet Warp rotation, multi-select, Control bar and a rest-shape session that follows Undo; Width tool on compound paths; Envelope dialogs with preview, Reset with Warp/Mesh, full Envelope Options, type/images/symbols/appearance/gradients/patterns distorted on canvas and in every export, warps that keep their frame, Edit Contents, mesh handles and Control bar; Blend Options, anchor-targeted Blend tool, editable spine, keys picked on the canvas, faithful interpolation and knockout; Anchor Point spine conversion/handle editing and selection priority (#2544), with #2425 Shift reshape preserved; Perspective Grid with Define Grid, presets, lock/snap/rulers, widgets, the 1–4 plane switch, movable planes, Perspective Selection scale/copy/perpendicular/Transform Again, and type and symbols truly projected with Edit Text. Left: Anti-Alias and Preserve Shape output, warp-envelope point editing, brush interpolation in blends, Free Transform/Scale/Reflect along a rotated box | 2–4 |
| M9 | Live effects (+ 3D & Materials) | 🟡 2D effects done incl. Effect → Pathfinder, Color Adjustments and Document Raster Effects Settings; PDF export warns when the pixel cap lowers raster-effect resolution; Artistic › Colored Pencil, Cutout, Dry Brush, Film Grain, Fresco, Neon Glow, Paint Daubs, Palette Knife, Poster Edges, Rough Pastels, Smudge Stick, Sponge, Underpainting and Watercolor and Sketch › Halftone Pattern, Bas Relief, Charcoal, Conté Crayon, Photocopy, Stamp, Torn Edges and Water Paper done (57/57 Photoshop filters); Revolve with automatic smooth vector shading, default-on circular caps and continuous rims, Extrude & Bevel, Inflate and Rotate with one to ten colored directional lights and four original lighting presets; SVG Filters, remaining raster effects and 3D materials and shadows pending | 81–130 |
| M10 | Brushes, symbols, patterns, Repeat | 🟡 pattern swatches (5 tile types, Pattern Options, editing mode, SVG `<pattern>`/PDF export) and live Repeat (radial/grid/mirror) done; interactive selected mirror axis implemented (focused and native checks passed; full CI blocked by an unrelated text test); symbol libraries done (Window › Symbol Libraries, three generated libraries (Basic Shapes, UI Frames, Map Markers), User Defined, Other Library…, Save Symbols); brush libraries done (Window › Brush Libraries, four generated libraries, User Defined, Other Library…, Save Brushes); symbol editing shows draggable 9-slice guides (#5280), with guides outside the artwork still unsupported; brushes/symbols in progress | 23–37 |
| M10 | Brushes, symbols, patterns, Repeat | 🟡 pattern swatches (5 tile types, Pattern Options, editing mode, SVG `<pattern>`/PDF export) and live Repeat (radial/grid/mirror) done; interactive selected mirror axis implemented (focused and native checks passed; full CI blocked by an unrelated text test); symbol libraries done (Window › Symbol Libraries, four generated libraries (Basic Shapes, UI Frames, Map Markers, Inventory Icons), User Defined, Other Library…, Save Symbols); brush libraries done (Window › Brush Libraries, five generated libraries, User Defined, Other Library…, Save Brushes); symbol editing shows draggable 9-slice guides (#5280), with guides outside the artwork still unsupported; brushes/symbols in progress | 23–37 |
| M11 | Artboards & views (selected-set deletion shared by Artboards menu, trash and Properties, retaining artboard 1 when all are selected; Artboard deletion keys keep the first of an all-selected set and protect artwork; history prunes invalid indices while preserving valid multiselection (history tests and full workspace CI pass); click-to-fit objects with the Artboard tool (#1227), artboard escape routing and document setup modal handoff done; artboard panel/tool with Move Artwork for X/Y fields and Artboard Options, Trim View, middle-button pan, print tiling and the status bar's artboard navigator with synchronized Artboard tool selection done; Window › Arrange › Tile and Consolidate All Windows done; multiple windows, presentation polish) (cached canvas reprojection preserves scale during resize, rotation and DPI changes; regression-tested and contributor-confirmed 2026-10-19; estimates unchanged) (cached canvas dimensions match the renderer limit before cache-key creation, view construction and worker submission; regression-tested; estimates unchanged); status-bar pointer coordinates follow the active ruler origin and General units | 🟡; Artboard Options shares existing presets and orientation controls and can fit artwork without moving it; artwork fitting includes all drawn document art across artboards and off-board; artwork bounds are cached by active document and revision, and selection uses the shared bounds cache across artboards | 15–25 |
| M12 | Advanced color & art (CMYK/ICC, separations, Gradient Mesh, Live Paint, Image Trace, Graphs) | 🟡 Gradient Mesh, Live Paint, Image Trace (junction-returning pieces retain their positioned boundaries; a simpler contour walk with identical output; an edge's sub-pixel shift is the same from either side; notches read only their own piece; collapsed loops keep few segments; large images trace with a warning; Auto Color keeps rare distinct colours; quick presets trace at once and the Image Trace button opens the adjustment controls; Properties reopens them; tiny fitted contours retain islands and holes; Create Strokes: exact crop EDT, Guo–Hall thinning and maximal-disc graph simplification; 15 presets, the 14 documented ones each with an enhanced version; Ignore Color, Shapes, Auto Grouping and Gradients options; measured in `image-trace-quality.md`; closed outlines retain their interior after straightening; the Flat Logo mode places edges to a fraction of a pixel, restores sharp corners, snaps lines and circles, and refuses gradients; live trace result bounds and selection highlights exclude the retained bitmap except in source-image views), Recolor Artwork, colour management (ICC, soft proofing, separations preview), Graphs (all 9 tools, Graph Data/Type, group-selected series colours persist through regenerate/save/open) done; Graph Design and Marker designs, Transpose and Switch x/y, `\|` label line breaks, the pie options, drop shadows, the legend across the top, overlapping widths, First Row/Column in Front, filled lines, kept label formatting and the Graph Data worksheet done; graph Column designs pending; Vector Halftone Preview keeps the selection box without drawing dot selection marks (#6369) | 6–10 |
| M13 | Automation (Actions ✅ record/playback, persisted; variables, scripting, batch) | 🟡 MCP `add_text` exposes existing vertical point, area and path type; `script.run` and File › Scripts › Other Script… run JavaScript files, and Window › Script Console shows their output; the script document model and batch work remain | 18–27 |
@@ -189,6 +189,7 @@ separate. Scores and hours unchanged. [Behavior and command details](development
| Date | Change | Summary |
|---|---|---|
| 2026-11-10 | minor | M10/G5: Inventory Icons built-in symbol library (Sword, Shield, Potion, Key, Gem); estimates unchanged |
| 2026-11-10 | minor | M7: the Edit Custom Dictionary dialog (#4936); the Check Spelling dialog remains; scores and estimates unchanged. |
| 2026-11-10 | minor | M10/G5: Game HUD built-in graphic style library; estimates unchanged |
| 2026-11-10 | minor | M10/G5: Map Markers built-in symbol library (Pin, Flag, Crosshair, Checkpoint); estimates unchanged |
File diff suppressed because one or more lines are too long