Bridge Training
UI Training

Overview

React components for the product model, fed by ViewModels built in the apps.

@workspace/ui-training is the React layer of the training product model, shared by apps/app and apps/admin. It ships dumb components only: cells, badges, labels, filters, preview sections and deal cards. Pages, routes, layouts, mutations and queries stay in the apps.

Placement rule

SubjectPackage
Card, auction, trick, deal diagram@workspace/ui-bridge
Deal metadata, student, group, session, account, collection, sharing@workspace/ui-training
Route, page, layout, actions, queriesthe consuming app

ViewModels, never the model

The package never imports @workspace/training, not even a type (lint-enforced). Each component describes its data with an XxxViewModel type exported next to it; the DTO → ViewModel mappers live in the consuming app. See ViewModel and Architecture.

Strings

Copy goes through a per-module Strings Provider (createStringsProvider from @workspace/shared-react) with English defaults. apps/app mounts the providers with its translations; apps/admin mounts none and renders the defaults.

ProviderHookModule
DealRowStringsProvideruseDealRowStringsdeal/strings
DealFilterStringsProvideruseDealFilterStringsdeal/filters/strings
DealPreviewStringsProvideruseDealPreviewStringsdeal/preview/strings
BoardCardStringsProvideruseBoardCardStringsdeal/board-card/strings
UserCellStringsProvideruseUserCellStringsuser/strings
UserSearchStringsProvideruseUserSearchStringsuser/strings
AccountHandleStringsProvideruseAccountHandleStringsaccount/strings

Client boundary

Interactive components mark themselves with import "client-only". Apps own their "use client" boundaries; the package never declares them.

Setup

package.json
{ "dependencies": { "@workspace/ui-training": "workspace:*" } }
globals.css
@import "@workspace/ui-training/styles.css";

The stylesheet only registers the package sources with Tailwind (@source), so its utility classes are generated in the consuming app.

Sub-path exports

Import pathExports
Account
@workspace/ui-training/account/account-handle-settingsAccountHandleSettings
@workspace/ui-training/account/account-handle-view-modelAccountHandleViewModel
@workspace/ui-training/account/account-handle-availability-view-modelAccountHandleAvailabilityViewModel, AccountHandleUnavailableReason
@workspace/ui-training/account/stringsAccountHandleStrings provider and hook
Deal
@workspace/ui-training/deal/levelLevel, levelColorVariants
@workspace/ui-training/deal/level-view-modelLevelViewModel
@workspace/ui-training/deal/deal-row-view-modelDealRowViewModel and its parts
@workspace/ui-training/deal/vote-view-modelVoteViewModel
@workspace/ui-training/deal/stringsDealRowStrings provider and hook
@workspace/ui-training/deal/cells/*Table cells (author, board number, code, date, name, status, supported languages, themes list, visibility, vote)
@workspace/ui-training/deal/filters/*ThemeFilterSubmenu, strings
@workspace/ui-training/deal/filters/theme-filter-option-view-modelThemeFilterOptionViewModel
@workspace/ui-training/deal/preview/*ComplementSection, ThemesPreviewSection, OrphanedAuthorBadge, strings
@workspace/ui-training/deal/preview/deal-preview-metadata-view-modelDealPreviewMetadataViewModel, DealPreviewAuthor, DealPreviewVotes
@workspace/ui-training/deal/preview/deal-preview-auction-system-view-modelDealPreviewAuctionSystemViewModel
@workspace/ui-training/deal/board-card/board-card-viewBoardCardView compound
@workspace/ui-training/deal/board-card/board-card-editBoardCardEdit compound
@workspace/ui-training/deal/board-card/editable-board-cardEditableBoardCard, ReorderSlotProps
@workspace/ui-training/deal/board-card/unavailable-board-cardUnavailableBoardCard
@workspace/ui-training/deal/board-card/boards-list-skeletonBoardsListSkeleton
@workspace/ui-training/deal/board-card/board-card-view-modelBoardCardViewModel
@workspace/ui-training/deal/board-card/board-usage-view-modelBoardUsageViewModel
@workspace/ui-training/deal/board-card/stringsBoardCardStrings provider and hook
User
@workspace/ui-training/user/user-cellUserCell
@workspace/ui-training/user/user-searchUserSearch compound
@workspace/ui-training/user/user-view-modelUserViewModel
@workspace/ui-training/user/stringsUserCell and UserSearch strings
Styles
@workspace/ui-training/styles.cssTailwind @source registration

Package structure

styles.css