Show empty asset groups on request, and add by the heading (#361)
The asset panel only listed the categories and types that hold assets. To make the first asset of a kind you had to know its category in the `+` menu. A switch now lists all of them, and a right-click on a heading offers just what sits under it. - General settings has "Show empty asset categories and types", off by default and kept in this browser. Applying it refreshes the panel at once through a new `onGeneralSettings` listener. - `groupAssets(assets, empty)` gives every category and type when asked. The empty ones stand faint with a count of 0, and an empty type has no chevron, since there is nothing to unfold. - `ListItem.faint` draws a row's label, hint and icons at half opacity, like a disabled widget. - A right-click on a category heading offers the types of that category without a submenu, on a type heading only that type. The empty space below the rows still opens the whole `+` menu. `ListView.onListMenu` passes the heading's id for this. - Every menu of new assets says "Create asset" above its entries, so a click on a type reads as making one. `MenuOptions.title` draws that muted line. It is not an entry and matches no search. Tests: - Unit asset-groups and view-tween: 23 green, 2 new. Counter-test with the empty flag ignored: the new groups test fails. - e2e 04 (melektaus-atx): ALL PASSED, 67 checks, 4 new and 1 rewritten. Counter-test with the heading id dropped: the 3 menu checks fail. The title is checked on the `+` button and on a type heading (2 checks extended), the rerun passed with 67 checks. - Gate (melektaus-atx): CHECK EXIT 0, 272 files, 4212 tests. It ran before the menu title. Afterwards only the menu and asset-groups units, typecheck and lint ran, all clean. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
cf96442835
commit
5cb7ef7bed
11 files changed
+269
-38
No files matched your search
@@ -274,6 +274,8 @@ export function uiHooks({ app, state, editor }: HookContext) {
|
||||
tooltip: () => tooltips.shown,
|
||||
/** Entries of the open menu in drawn order, `null` for a separator line (#43). */
|
||||
menuRows: () => currentMenu()?.rowsDrawn() ?? null,
|
||||
/** The muted title above the entries of the open menu, `null` without one (#361). */
|
||||
menuTitle: () => currentMenu()?.titleDrawn() ?? null,
|
||||
/** Per entry of `menuRows`, whether an icon stands in front of it. */
|
||||
menuIcons: () => currentMenu()?.iconsDrawn() ?? null,
|
||||
/** Per entry of `menuRows`, whether it opens a submenu. With one open, `menuRows` is that submenu. */
|
||||
@@ -358,6 +360,11 @@ export function uiHooks({ app, state, editor }: HookContext) {
|
||||
const dialog = editor.generalSettingsDialog();
|
||||
return dialog ? centreOf(dialog.zoomControl) : null;
|
||||
},
|
||||
/** Where to click the switch for empty asset groups inside that dialog (#361). */
|
||||
generalSettingsEmptyGroupsAt: () => {
|
||||
const dialog = editor.generalSettingsDialog();
|
||||
return dialog ? centreOf(dialog.emptyGroupsControl) : null;
|
||||
},
|
||||
/**
|
||||
* The zoom transition in ms as kept in this browser; with `ms` it is set first. The harness sets
|
||||
* 0 on every load, so a check reading the zoom after the wheel finds the step and not the way.
|
||||
@@ -391,6 +398,8 @@ export function uiHooks({ app, state, editor }: HookContext) {
|
||||
/** The asset row lighting up after a ping (#221) and how brightly, or null once it has faded. */
|
||||
assetPing: () => assets.pingState(),
|
||||
assetRowColor: (id: string) => assets.rowColor(id),
|
||||
/** Opacity of a shown row's label, below 1 for an empty category or group (#361). */
|
||||
assetRowAlpha: (id: string) => assets.rowAlpha(id),
|
||||
/** The asset panel's groups in order; a heading's row is `assetRow('group:<type>')`. */
|
||||
assetGroups: () => assets.groups(),
|
||||
/** The categories above the groups; a heading's row is `assetRow('category:<name>')`. */
|
||||
|
||||
Reference in new issue
Block a user