37 lines
1.1 KiB
TypeScript
37 lines
1.1 KiB
TypeScript
import type { TrackUnitStickingType, TrackUnitType } from "@/Track";
|
|
import type { IconName } from "@/ui/Widgets/Icon/icons";
|
|
|
|
export const TypeClasses = [ "Ghost", "Accent" ] as const;
|
|
|
|
export const StickingTypeIconMap = {
|
|
none: null,
|
|
lf: 'lf',
|
|
lh: 'lh',
|
|
rf: 'rf',
|
|
rh: 'rh',
|
|
} as const satisfies Record<TrackUnitStickingType, IconName | null>;
|
|
|
|
export const TrackUnitTypeClassMap = {
|
|
"Normal": [],
|
|
"GhostNote": ["Ghost"],
|
|
"Accent": ["Accent"],
|
|
"GhostNoteAccent": ["Ghost", "Accent"],
|
|
} as const satisfies Record<TrackUnitType, Readonly<string[]>>;
|
|
|
|
export function getClasses(options: { on: boolean, stickingType: TrackUnitStickingType, type: TrackUnitType, highlightable?: boolean }) {
|
|
const classes = ["track-unit"];
|
|
if (options.on) {
|
|
classes.push("on");
|
|
}
|
|
if (options.stickingType && StickingTypeIconMap[options.stickingType]) {
|
|
classes.push("icon-visible");
|
|
}
|
|
if (options.type) {
|
|
classes.push(...TrackUnitTypeClassMap[options.type]);
|
|
}
|
|
if (options.highlightable) {
|
|
classes.push("highlightable");
|
|
}
|
|
return classes;
|
|
}
|