/** * The board page's class vocabulary, as one table. * * The document (`page.ts`) and the client bundle cannot import from each other, so a * class name used to be a string in each — and two of them were assembled at runtime * (`"board-card__reason" + kind`), which is why nothing could compare what the page * wears with what `styles.ts` draws. Reading both halves from this table makes those two * sets enumerable, and `pages.test.ts` holds them equal. * * A name here is a **class**, not an id: ids are how the client finds an element * (`getElementById`), they are not styled, and `pages.test.ts` pins their list. */ /** Every `board-*` class the page wears. Keys are what the code reads; values are what CSS matches. */ export const BOARD_CLASS = { // The shell, the toolbar, the bar under it, and the two panel wrappers. toolbar: "board-toolbar", bar: "board-bar", main: "board-main", panel: "board-panel", filter: "board-filter", picker: "board-picker", progress: "board-progress", noCards: "board-no-cards", skeleton: "board-skeleton", // One lane: a tray of cards with a head that sticks and folds. lanes: "board-lanes", lane: "board-lane", laneHead: "board-lane__head", laneDot: "board-lane__dot", laneToggle: "board-lane__toggle", laneCount: "board-lane__count", laneList: "board-lane__list", laneEmpty: "board-lane__empty", // One card, the facts its meta line carries, and the two tones its reason line can take. card: "board-card", cardHead: "board-card__head", cardId: "board-card__id", cardTitle: "board-card__title", cardMeta: "board-card__meta", cardNotes: "board-card__notes", cardPaths: "board-card__paths", cardReason: "board-card__reason", // One class per tone, never per reason kind: the same tone is what the terminal paints. cardReasonMuted: "board-card__reason--muted", cardReasonDim: "board-card__reason--dim", cardReasonWarn: "board-card__reason--warn", cardReasonAccent: "board-card__reason--accent", cardReasonDanger: "board-card__reason--danger", cardReasonSuccess: "board-card__reason--success", // A priority is a word and a level, not a second pill: the level is what it is coloured by. cardPriority: "board-card__priority", cardPriorityHigh: "board-card__priority--high", cardPriorityLow: "board-card__priority--low", // The card dialog: the record of one card — its reason, a ladder of facts, the contract // it promises, and its notes. dialogPanel: "board-dialog__panel", dialogHead: "board-dialog__head", dialogId: "board-dialog__id", dialogState: "board-dialog__state", // How long the card has held the lane the head names, in the lane word's own line. dialogAge: "board-dialog__age", dialogBody: "board-dialog__body", dialogSection: "board-dialog__section", dialogHeading: "board-dialog__heading", dialogCount: "board-dialog__count", dialogFacts: "board-dialog__facts", dialogPaths: "board-dialog__paths", dialogPath: "board-dialog__path", dialogValue: "board-dialog__value", dialogPlan: "board-dialog__plan", // The sentence the card face prints, whole, and the promise it was opened to read: the // contract's block is its own, and its signature closes it. dialogReason: "board-dialog__reason", dialogContract: "board-dialog__contract", dialogSign: "board-dialog__sign", dialogNotes: "board-dialog__notes", dialogNote: "board-dialog__note", dialogNoteFoot: "board-dialog__note-foot", dialogNoteBy: "board-dialog__note-by", dialogNoteAt: "board-dialog__note-at", dialogNoteText: "board-dialog__note-text", // The Team tab: the queue of decisions, the roster, and the Done strip. team: "board-team", teamGrid: "board-team__grid", teamGroup: "board-team__group", teamCaption: "board-team__caption", teamQueue: "board-team__queue", teamDecision: "board-team__decision", teamOpen: "board-team__open", teamRef: "board-team__ref", teamTitle: "board-team__title", teamFoot: "board-team__foot", teamWhy: "board-team__why", teamRoster: "board-team__roster", teamMate: "board-team__mate", teamDot: "board-team__dot", teamName: "board-team__name", teamMets: "board-team__mets", teamEmpty: "board-team__empty", teamDone: "board-team__done", teamId: "board-team__id", teamDoneIds: "board-team__ids", teamTail: "board-team__tail", teamFold: "board-team__fold", } as const satisfies Readonly>;