Skip to content

Commit 629cf86

Browse files
Gloss Content Ingestion
1 parent e37fb18 commit 629cf86

228 files changed

Lines changed: 21022 additions & 2029 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.firebaserc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"projects": {
3-
"default": "holoui-editor"
3+
"default": "gloss-editor"
44
}
55
}

.github/workflows/firebase-hosting.yml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ permissions:
1010
contents: read
1111

1212
env:
13-
ARCANE_JASPR_REF: b896cdc28008ef56439f10670a177943c7aba69e
14-
FIREBASE_PROJECT_ID: holoui-editor
13+
ARCANE_JASPR_REF: 665652de05c83d51ba26da51a06398bbd1c6f57e
14+
FIREBASE_PROJECT_ID: gloss-editor
1515
FIREBASE_TOOLS_VERSION: 15.25.1
1616
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
1717
NODE_VERSION: 22.23.1
@@ -26,7 +26,7 @@ jobs:
2626
runs-on: ubuntu-latest
2727
environment:
2828
name: production
29-
url: https://holoui.volmitsoftware.com
29+
url: https://gloss.volmitsoftware.com
3030

3131
steps:
3232
- name: Checkout repository
@@ -68,15 +68,15 @@ jobs:
6868

6969
- name: Build
7070
run: |
71-
HUI_VERSION="$(sed -n 's/^version: //p' pubspec.yaml)"
71+
GLOSS_VERSION="$(sed -n 's/^version: //p' pubspec.yaml)"
7272
dart run jaspr_cli:jaspr build \
73-
--dart-define=HUI_VERSION="$HUI_VERSION" \
74-
--dart-define=HUI_COMMIT="${GITHUB_SHA:0:7}"
73+
--dart-define=GLOSS_VERSION="$GLOSS_VERSION" \
74+
--dart-define=GLOSS_COMMIT="${GITHUB_SHA:0:7}"
7575
7676
- name: Authenticate to Google Cloud
7777
uses: google-github-actions/auth@v3
7878
with:
79-
credentials_json: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_HOLOUI_EDITOR }}
79+
credentials_json: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_GLOSS_EDITOR }}
8080

8181
- name: Deploy Firebase Hosting
8282
run: |
@@ -94,7 +94,7 @@ jobs:
9494
actual_sha=""
9595
for attempt in {1..12}; do
9696
if actual_sha="$(curl -fsS --max-time 30 \
97-
"https://holoui.volmitsoftware.com/main.client.dart.js?release=$GITHUB_SHA" \
97+
"https://gloss.volmitsoftware.com/main.client.dart.js?release=$GITHUB_SHA" \
9898
| sha256sum | awk '{print $1}')" \
9999
&& [[ "$actual_sha" == "$expected_sha" ]]; then
100100
echo "Firebase is serving the client bundle built from $GITHUB_SHA."

README.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ Version 3.1.0 — a from-scratch rewrite in [arcane_jaspr](https://github.com/Ar
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.
1414
- **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).
1515
- **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.
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 world-panel 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 panels 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.gloss.volmitsoftware.com/v2`) 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

@@ -43,6 +43,7 @@ The hosted editor is deployed to [holoui.volmitsoftware.com](https://holoui.volm
4343

4444
```
4545
lib/model/ HoloUI JSON data model + codec (runtime semantics, unknown-key preserving)
46+
lib/doctype/ per-kind DocumentTypeAdapter registry (codec, views, capabilities, templates, inspector)
4647
lib/logic/ validation rules, Minecraft text parser, viewport math, hitbox geometry
4748
lib/services/ browser storage, image library, catalogs, file transfer, clipboard
4849
lib/state/ EditorStore, IndexedDB persistence, multi-doc workspace and menu flow maps
@@ -51,4 +52,6 @@ web/assets/ fonts (Geist, lucide, Minecraft), item/sound catalogs, backdro
5152
tool/ asset extraction scripts
5253
```
5354

54-
The format contract is derived from the plugin's Java parsing code (`art.arcane.holoui.config.*` via VolmLib's Gson setup), not from the shipped JSON schema. The schema is hand-maintained documentation; where the two disagree, this editor follows the code.
55+
## Editor Tandem
56+
57+
This editor is developed in tandem with the merged **Gloss** plugin (`VolmitSoftware/Gloss`, checked out beside this repo at `../Gloss`), and **Gloss is the truth repo**: every format contract is derived from its Java parsing code (`art.arcane.gloss.*` via VolmLib's Gson setup), never from schemas or documentation — where prose and code disagree, this editor follows the code. The concrete anchors of that contract — shipped defaults, baselines, preview cards, golden snapshots, generated catalogs, and the cross-repo vector tables — are inventoried in [`FIXTURES.md`](FIXTURES.md); the test suite compares the editor's copies against the live Gloss checkout, so a change to any shared contract must land editor-side and plugin-side in the same workstream, with both suites green against the paired checkouts. Editor copies are never edited in place: the Gloss resource changes first, then the copy (and its embedded Dart constant) is refreshed or regenerated here.

firebase.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"hosting": {
3-
"site": "holoui-editor",
3+
"site": "gloss-editor",
44
"public": "build/jaspr",
55
"ignore": [
66
"firebase.json",

lib/app.dart

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,16 @@ import 'package:arcane_jaspr/arcane_jaspr.dart';
44
import 'package:arcane_jaspr_shadcn/arcane_jaspr_shadcn.dart';
55

66
import 'components/canvas/canvas.dart';
7-
import 'components/board/board.dart';
7+
import 'components/panel/panel.dart';
88
import 'components/code_editor/code_editor_view.dart';
99
import 'components/dialogs/dialogs.dart';
10+
import 'components/animation/animation_view.dart';
11+
import 'components/bubble/bubble_view.dart';
12+
import 'components/emoji/emoji_view.dart';
13+
import 'components/motd/motd_view.dart';
14+
import 'components/scoreboard/scoreboard_view.dart';
15+
import 'components/tablist/tablist_view.dart';
16+
import 'components/hologram/hologram_view.dart';
1017
import 'components/inspector/inspector.dart';
1118
import 'components/panels/panels.dart';
1219
import 'components/preview/preview_view.dart';
@@ -20,9 +27,10 @@ import 'services/image_library.dart';
2027
import 'services/page_lifecycle.dart';
2128
import 'services/workspace_location.dart';
2229
import 'state/editor_scope.dart';
30+
import 'doctype/doctype.dart';
2331
import 'state/editor_store.dart';
2432
import 'state/workspace.dart';
25-
import 'state/workspace_board.dart';
33+
import 'state/workspace_panel.dart';
2634
import 'state/workspace_bundle.dart';
2735
import 'state/workspace_route.dart';
2836
import 'theme/theme_state.dart';
@@ -315,22 +323,22 @@ class _AppState extends State<App> {
315323
final EditorSyncProject? project = _syncImportSession?.project;
316324
if (project == null) return false;
317325
final Set<String> ids = project.menus
318-
.map((EditorSyncMenu menu) => menu.id)
326+
.map((EditorSyncDocument menu) => menu.id)
319327
.toSet();
320328
final bool documentConflict = _store.workspace.docs.any(
321329
(WorkspaceDoc doc) =>
322-
doc.kind == WorkspaceDocKind.menu && ids.contains(doc.runtimeId),
330+
doc.kind == DocumentTypes.menu.kind && ids.contains(doc.runtimeId),
323331
);
324332
final bool imageConflict = project.images.any((EditorSyncImage incoming) {
325333
final StoredImage? local = _images.byPath(incoming.path);
326334
return local != null && local.dataUri != incoming.data;
327335
});
328336
final bool boardConflict =
329-
project.kind == 'board' &&
337+
project.kind == 'panel' &&
330338
_store.workspace.docs.any(
331339
(WorkspaceDoc doc) =>
332-
doc.kind == WorkspaceDocKind.board &&
333-
decodeWorkspaceBoard(doc.json).data.runtimeBoardId ==
340+
doc.kind == DocumentTypes.panel.kind &&
341+
decodeWorkspacePanel(doc.json).data.runtimeBoardId ==
334342
project.subjectId,
335343
);
336344
return documentConflict || imageConflict || boardConflict;
@@ -648,7 +656,7 @@ class _AppState extends State<App> {
648656

649657
void _exportConflictWork() {
650658
downloadText(
651-
'holoui-workspace.json',
659+
'gloss-workspace.json',
652660
encodeWorkspaceBundle(_store.workspace, _images),
653661
mime: 'application/json',
654662
);
@@ -660,7 +668,7 @@ class _AppState extends State<App> {
660668
kind: binding.kind,
661669
subjectId: binding.subjectId,
662670
baseRevision: binding.baseRevision,
663-
menus: const <EditorSyncMenu>[],
671+
documents: const <EditorSyncDocument>[],
664672
images: const <EditorSyncImage>[],
665673
constraints: binding.constraints,
666674
);
@@ -669,9 +677,9 @@ class _AppState extends State<App> {
669677
Widget build(BuildContext context) => ArcaneApp(
670678
stylesheet: const _OfflineShadcnStylesheet(theme: ShadcnTheme.midnight),
671679
brightness: _brightness,
672-
title: 'HoloUI Editor',
680+
title: 'Gloss Editor',
673681
description:
674-
'Visual web editor for creating and previewing HoloUI menu configurations.',
682+
'Visual web editor for creating and previewing Gloss menu configurations.',
675683
// Stays true, and the reason is not the one the flag's name suggests.
676684
// `ArcaneApp` gates ONE component on it (`support/app.dart:114`) and
677685
// that component emits `ArcaneScripts.all` — the modern
@@ -744,7 +752,14 @@ class _AppState extends State<App> {
744752
images: _images,
745753
catalogs: _catalogs,
746754
),
747-
board: BoardView(store: _store),
755+
panel: PanelView(store: _store),
756+
hologram: HologramView(store: _store),
757+
animation: AnimationView(store: _store),
758+
scoreboard: ScoreboardView(store: _store),
759+
motd: MotdView(store: _store),
760+
emoji: EmojiView(store: _store),
761+
bubble: BubbleView(store: _store),
762+
tablist: TablistView(store: _store),
748763
inspector: InspectorPane(
749764
store: _store,
750765
images: _images,

0 commit comments

Comments
 (0)