Skip to content

Commit e37fb18

Browse files
dwa
1 parent 2b3f0da commit e37fb18

38 files changed

Lines changed: 1970 additions & 249 deletions

README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ Version 3.1.0 — a from-scratch rewrite in [arcane_jaspr](https://github.com/Ar
66

77
## Features
88

9-
- **Visual canvas** in block space: zoom/pan, grid + snapping, drag components, selection, keyboard nudge. Renders text (legacy `&` codes and MiniMessage, in the Minecraft font), item sprites, pixel-art image icons and animated icons at the exact in-game metrics (0.21875 blocks per text line, `uiScale` semantics, hitbox overlays matching the plugin's `debugHitbox`).
9+
- **Visual canvas** in block space: zoom/pan, grid + snapping, drag components, selection, keyboard nudge. Uses the runtime's documented text-line scale, `uiScale` semantics and hitbox geometry while clearly separating approximations that depend on the Minecraft client.
1010
- **Linked button hitboxes**: text and image click planes follow the visible render, while an optional custom width and height can replace automatic icon-derived sizing without creating an independent position that can drift away.
11-
- **Runtime 3D preview**: reproduces the open pose, `followPlayer` position and yaw, fixed / vertical / horizontal / center icon billboards, matching click planes, hover push and nearest-click behavior. PlaceholderAPI tokens remain literal because the browser has no server context; the preview reports their `refreshTicks` cadence instead.
11+
- **Runtime 3D preview**: simulates the open pose, `followPlayer` position and yaw, fixed / vertical / horizontal / center icon billboards, click planes, hover push and nearest-click behavior. Client text wrapping, culling, brightness, entity models, effects, obstruction and competition between personal menus and boards still require in-game validation. PlaceholderAPI tokens remain literal because the browser has no server context; the preview reports their `refreshTicks` cadence instead.
1212
- **Full format coverage** as the plugin's Gson actually reads it — all three component types (button / decoration / toggle), all seven authorable icon types (text / textImage / animatedTextImage / item / block / customItem / entity), all six actions (command / sound / message / teleport / connect / navigate), toggle conditions, `maxDistance`, `closeOnDeath`, `closeOnTeleport`, `customModelValue` (the real key — the `customModelData` older files carry is migrated on import).
1313
- **Code view** with two-way sync, plus split view. Validated menu handoffs retain their exact source formatting and extension keys through storage and export until the first visual edit or explicit Format action.
14-
- **Validation** engine encoding the plugin's real parsing rules (lowercase registry keys, action source spellings, silent-zero pitfalls like `volume: 0`, legacy and MiniMessage formatting, hitbox overlap warnings).
15-
- **Image library**: upload validated PNG pixel art, preview exactly as the plugin rasterizes it, export `images.zip` laid out for `plugins/holoui/images/`. Server sync preserves captured PNG, JPEG, GIF, WebP and BMP bytes losslessly.
16-
- **Workspace**: folders, multiple menus and flow boards, atomic IndexedDB autosave with previous-transaction recovery and cross-tab conflict protection, undo/redo, templates, and searchable catalogs. Existing `holoui.workspace.v1` / `v2` localStorage data migrates once without deleting the rollback copy.
17-
- **Optional server sync**: capability links opened from `/holoui edit` import an exact menu or persistent world-board graph through the configured relay. Board publication retains the bound no-delete baseline and adds only menus reachable from the board root, leaving unrelated folder documents local. **Publish to Server** appears beside Import and Export only during a live capability session; it durably saves a board project and hot-reloads the running board, while revision conflicts never overwrite local work. Links use the configured HTTPS relay (the plugin defaults to `https://sync.holoui.volmitsoftware.com/v1`) or a localhost HTTP development relay; an unreachable provider is reported without implying that a deployment is available.
14+
- **Validation** engine aligned with the plugin's authoring contract (lowercase registry keys, action source spellings, silent-zero pitfalls like `volume: 0`, legacy and MiniMessage formatting, hitbox overlap warnings).
15+
- **Image library**: upload validated PNG pixel art, preview with the plugin's rasterization rules, export `images.zip` laid out for `plugins/holoui/images/`. Server sync preserves captured PNG, JPEG, GIF, WebP and BMP bytes losslessly.
16+
- **Workspace**: folders, multiple menus and menu flow maps, atomic IndexedDB autosave with previous-transaction recovery and cross-tab conflict protection, undo/redo, templates, and searchable catalogs. Renaming a runtime id updates navigation, linked board roots and sync scope as one checked save; dropped JSON opens as a uniquely named document instead of replacing the active one. Existing `holoui.workspace.v1` / `v2` localStorage data migrates once without deleting the rollback copy.
17+
- **Optional server sync**: capability links opened from `/holoui edit` import an exact menu or persistent world-board graph through the configured relay. Linked boards expose typed root-menu, transform, follow, audience, permission and range controls, with strict JSON under Advanced. Board publication retains the bound no-delete baseline and adds only menus reachable from the board root, leaving unrelated folder documents local. A labelled **Publish to Server** action appears in the connection bar during a live capability session; it durably saves a board project and hot-reloads the running board, while revision conflicts never overwrite local work. Links use the configured HTTPS relay (the plugin defaults to `https://sync.holoui.volmitsoftware.com/v1`) or a localhost HTTP development relay; an unreachable provider is reported without implying that a deployment is available.
1818

1919
The editor itself remains a static client with no accounts. Normal authoring and autosave are local-only; opening a server-issued capability link enables bounded HTTPS requests to that link's relay until the tab disconnects. Capability tokens stay in the URL fragment and tab `sessionStorage`, never in workspace documents or exported bundles. If tab storage is blocked, the capability stays in the fragment and the sync bar tells you to copy the link before reloading.
2020

@@ -45,7 +45,7 @@ The hosted editor is deployed to [holoui.volmitsoftware.com](https://holoui.volm
4545
lib/model/ HoloUI JSON data model + codec (runtime semantics, unknown-key preserving)
4646
lib/logic/ validation rules, Minecraft text parser, viewport math, hitbox geometry
4747
lib/services/ browser storage, image library, catalogs, file transfer, clipboard
48-
lib/state/ EditorStore, IndexedDB persistence, multi-doc workspace and flow boards
48+
lib/state/ EditorStore, IndexedDB persistence, multi-doc workspace and menu flow maps
4949
lib/components/ shell (top bar, shortcuts, palette), canvas, inspector, panels, dialogs
5050
web/assets/ fonts (Geist, lucide, Minecraft), item/sound catalogs, backdrop, brand
5151
tool/ asset extraction scripts

lib/components/board/board_view.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class _BoardViewState extends State<BoardView> {
4444
final WorkspaceBoardDecodeResult? decoded = component.store.activeBoard;
4545
if (decoded == null) {
4646
return const dom.div(classes: 'hui-board-empty', <Widget>[
47-
Text('Open a flow board to inspect menu navigation.'),
47+
Text('Open a menu flow map to inspect menu navigation.'),
4848
]);
4949
}
5050
final WorkspaceBoardData board = decoded.data;
@@ -77,7 +77,7 @@ class _BoardViewState extends State<BoardView> {
7777
ArcaneIcon.workflow(size: IconSize.md),
7878
dom.div(<Widget>[
7979
dom.h1(<Widget>[
80-
Text(component.store.workspace.active?.title ?? 'Board'),
80+
Text(component.store.workspace.active?.title ?? 'Menu flow map'),
8181
]),
8282
dom.p(<Widget>[
8383
Text(

lib/components/dialogs/help_dialog.dart

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -292,9 +292,9 @@ class HelpDialog extends StatelessWidget {
292292
),
293293
const HuiSteps(
294294
steps: <String>[
295-
'Run /holoui items on the server to see which providers are '
295+
'Run /holoui item status on the server to see which providers are '
296296
'present, ready, and how many ids they expose.',
297-
'Run /holoui items export to write '
297+
'Run /holoui item export to write '
298298
'${huiPluginFolder}custom-items.json.',
299299
'Open Settings in the hosted editor and import that file. The '
300300
'plugin does not host or upload it.',
@@ -303,7 +303,7 @@ class HelpDialog extends StatelessWidget {
303303
'export.',
304304
],
305305
),
306-
const HuiCodeBlock(text: '/holoui items\n/holoui items export'),
306+
const HuiCodeBlock(text: '/holoui item status\n/holoui item export'),
307307
],
308308
);
309309

@@ -368,8 +368,9 @@ class HelpDialog extends StatelessWidget {
368368

369369
const List<String> _nonFeatureList = <String>[
370370
'No background: a menu has no panel, colour or image behind its components.',
371-
'No per-component scale, rotation or alignment. Size comes from the server '
372-
'uiScale and the icon itself.',
371+
'No independent component transform beyond offset. Display-backed icons '
372+
'can own scale and alignment, while a persistent board rotates and '
373+
'scales the whole menu.',
373374
"No localization of menu text. language.yml only translates the plugin's own "
374375
'messages, never the contents of a menu.',
375376
'No per-component permission or visibility rule. The only condition is a '
@@ -388,6 +389,7 @@ const List<String> _nonFeatureList = <String>[
388389
'whatever its provider plugin builds, but the JSON cannot add to it.',
389390
'No format version or migration: what you export is exactly what the plugin '
390391
'reads.',
391-
'No external menu-opening trigger other than a command or the Java API. '
392-
'Nothing in the JSON opens a menu on join, from a block, or from an NPC.',
392+
'Persistent world boards open automatically for eligible nearby players. '
393+
'Menu JSON has no join, block or NPC trigger; personal menus still open '
394+
'through a command or the Java API.',
393395
];

lib/components/dialogs/import_dialog.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,9 +191,9 @@ class _ImportDialogState extends State<ImportDialog> {
191191
HuiDialogSection(
192192
title: 'From a file',
193193
description:
194-
'Dropping a .json file anywhere in the editor does the same '
195-
'thing. A menu or a container-preview document both work — '
196-
'the shape of the file decides which.',
194+
'A menu or a container-preview document both work; the file shape '
195+
'decides which. Dropping JSON anywhere creates a new document. This '
196+
'dialog replaces the active document only after you confirm below.',
197197
children: <Widget>[
198198
dom.div(classes: 'hui-dialog-actions', <Widget>[
199199
Button(

lib/components/dialogs/settings_dialog.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ class SettingsDialog extends StatelessWidget {
110110
final HuiCustomItemCatalog? parsed = HuiCustomItemCatalog.parse(picked.$2);
111111
if (parsed == null) {
112112
toast.error(
113-
'${picked.$1} is not a HoloUI custom item catalog. Run /holoui items '
113+
'${picked.$1} is not a HoloUI custom item catalog. Run /holoui item '
114114
'export and pick the file it names.',
115115
);
116116
return;
@@ -167,7 +167,7 @@ class SettingsDialog extends StatelessWidget {
167167
),
168168
const dom.p(classes: 'hui-dialog-note', <Widget>[
169169
Text(
170-
'Run /holoui items export on your server, then import '
170+
'Run /holoui item export on your server, then import '
171171
'plugins/holoui/custom-items.json here. The server is still '
172172
'the only thing that can confirm an id.',
173173
),

0 commit comments

Comments
 (0)