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>
28 lines
859 B
TypeScript
28 lines
859 B
TypeScript
export interface UploadedTexture {
|
||
/** Content-addressed name in `data/textures/`: `{sha256}.{png|jpg|webp|gif}` (see `isTextureFile`). */
|
||
file: string;
|
||
width: number;
|
||
height: number;
|
||
bytes: number;
|
||
}
|
||
|
||
export interface StoredTexture {
|
||
file: string;
|
||
bytes: number;
|
||
updatedAt: string;
|
||
}
|
||
|
||
/**
|
||
* An upload is raw bytes rather than a multipart form: name, size and format are derived from the
|
||
* image itself on the server, so there is nothing else to send.
|
||
*/
|
||
export interface TextureStore {
|
||
/**
|
||
* `type` only fills the Content-Type header – the server trusts the bytes, not the label – and
|
||
* uploading the same picture twice yields the same file, the hash of its content.
|
||
*/
|
||
upload(bytes: Blob | ArrayBuffer, type: string): Promise<UploadedTexture>;
|
||
list(): Promise<StoredTexture[]>;
|
||
delete(file: string): Promise<void>;
|
||
}
|