Remove comments that only restate the code, keeping the section banners and the notes that carry a reason, a measured fact or an external contract. ButtonOptions.width claimed to be a fixed width but only set minWidth, so the Graph and Texture pickers grew with the name they showed. It is now what it promises, with a separate minWidth for the buttons that have two forms. Narrow buttons shrink their padding, otherwise a 24px icon button had 8px left for its glyph and truncate dropped it entirely. __gm.labelsDropped() guards that class: the overflow guard only saw text that was too wide, never a label truncated to nothing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
31 lines
1.2 KiB
TypeScript
31 lines
1.2 KiB
TypeScript
import type { Asset } from '../model/Asset';
|
||
import { type AssetType, isPlaceableType } from '../model/AssetTypes';
|
||
import { findAsset, type Project } from '../model/Project';
|
||
|
||
export const NO_ASSET_LABEL = 'None';
|
||
|
||
/**
|
||
* The asset's name, "None" for the empty id, `<id>?` when it no longer resolves – a dangling
|
||
* reference shows its id rather than passing for an empty field.
|
||
*/
|
||
export function assetRefLabel(project: Project | null, id: string): string {
|
||
if (id === '') return NO_ASSET_LABEL;
|
||
return (project ? findAsset(project, id) : undefined)?.name ?? `${id}?`;
|
||
}
|
||
|
||
/**
|
||
* The assets an `asset` property offers, in menu order; without `assetTypes` every placeable one.
|
||
* Sorted by name so the order does not depend on creation time.
|
||
*/
|
||
export function assetRefChoices(project: Project, assetTypes?: readonly AssetType[]): Asset[] {
|
||
const allowed = (asset: Asset): boolean =>
|
||
assetTypes ? assetTypes.includes(asset.type) : isPlaceableType(asset.type);
|
||
return project.assets
|
||
.filter(allowed)
|
||
.sort((a, b) => a.name.localeCompare(b.name) || a.type.localeCompare(b.type));
|
||
}
|
||
|
||
export function assetChoiceLabel(asset: Asset): string {
|
||
return `${asset.name} (${asset.type})`;
|
||
}
|