| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- /* Tree rows (figma Cell set 14:3080): project 54px two-line, session 34px
- single-line, radius 8, indent step 22px (16px slot + 6px gap). Hover swaps
- are pure CSS: project folder -> chevron + action buttons; session time ->
- ellipsis button. */
- .projectRow,
- .sessionRow {
- display: flex;
- align-items: center;
- gap: 6px;
- border-radius: 8px;
- padding: 0 8px;
- cursor: pointer;
- user-select: none;
- color: var(--dsw-alias-label-primary);
- }
- .projectRow:hover,
- .sessionRow:hover {
- background: var(--dsw-alias-interactive-bg-hover);
- }
- .sessionRow.selected {
- background: var(--dsw-alias-interactive-bg-active);
- }
- /* Two-line row: the leading slot (folder/chevron), title, and trailing
- actions all top-align on the 20px first text line (figma cell) — content
- is 42px (20 + 2 + 20), so 6px vertical padding centers the block. */
- .projectRow {
- height: 54px;
- align-items: flex-start;
- padding-top: 6px;
- padding-bottom: 6px;
- box-sizing: border-box;
- }
- .projectRow .rowActions {
- height: 20px;
- }
- /* Session cell (figma): pad 8, a 16px status slot, then a 4px title gap. */
- .sessionRow {
- height: 34px;
- gap: 0;
- /* Mount fade: session rows appear by unfolding a group (or the tree
- mounting). Stable row keys keep already-visible rows from replaying it. */
- animation: row-in 150ms var(--ds-ease-in-out);
- }
- .sessionRow .title {
- margin: 0 6px 0 4px;
- }
- @keyframes row-in {
- from { opacity: 0; }
- }
- .slot {
- flex: none;
- width: 16px;
- height: 20px;
- display: inline-flex;
- align-items: center;
- justify-content: center;
- color: var(--dsw-alias-label-tertiary);
- }
- .folderActive {
- color: var(--dsw-alias-state-business-primary);
- }
- /* Project leading slot: folder by default, expand arrow on row hover. */
- .projectRow .chevron { display: none; }
- .projectRow:hover .chevron { display: inline-flex; }
- .projectRow:hover .folder { display: none; }
- /* Expand arrow (filled triangle): points right closed, rotates to point down open. */
- .arrow {
- transition: transform 150ms var(--ds-ease-in-out);
- }
- .arrowOpen {
- transform: rotate(90deg);
- }
- .projectText {
- flex: 1;
- min-width: 0;
- display: flex;
- flex-direction: column;
- gap: 2px;
- }
- .title {
- min-width: 0;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- font-size: 14px;
- line-height: 20px;
- }
- .renameInput {
- min-width: 0;
- font-size: 14px;
- line-height: 20px;
- padding: 0 2px;
- border: 1px solid var(--dsw-alias-border-l2);
- border-radius: 4px;
- background: var(--dsw-alias-button-elevated-fill);
- color: inherit;
- outline: none;
- }
- .sessionRow .title {
- flex: 1;
- }
- .meta {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- font-size: 12px;
- line-height: 20px;
- color: var(--dsw-alias-label-tertiary);
- }
- .time {
- flex: none;
- font-size: 12px;
- line-height: 20px;
- color: var(--dsw-alias-label-tertiary);
- }
- .dot {
- flex: none;
- }
- /* Trailing action buttons surface on hover only (figma 27:4668 / 27:4656):
- bare 16px glyphs, gap 12, tertiary grey. */
- .rowActions {
- flex: none;
- display: none;
- align-items: center;
- gap: 12px;
- }
- .projectRow:hover .rowActions,
- .sessionRow:hover .rowActions,
- .projectRow.menuOpen .rowActions,
- .sessionRow.menuOpen .rowActions {
- display: inline-flex;
- }
- .sessionRow:hover .time,
- .sessionRow.menuOpen .time {
- display: none;
- }
- /* An open row menu pins the hover affordances (figma: the row keeps its
- hover fill while its dropdown is up). */
- .projectRow.menuOpen,
- .sessionRow.menuOpen {
- background: var(--dsw-alias-interactive-bg-hover);
- }
- /* Drag reorder insert line (workspace-group session rows): 2px accent above or
- below the hovered row, drawn with box-shadow so no layout shift. */
- .sessionRow.dropBefore {
- box-shadow: 0 -2px 0 0 var(--dsw-alias-state-business-primary);
- }
- .sessionRow.dropAfter {
- box-shadow: 0 2px 0 0 var(--dsw-alias-state-business-primary);
- }
- /* Hover-card body (figma 169:16903): dark surface, fixed colors both themes. */
- .hoverContent {
- display: flex;
- flex-direction: column;
- gap: 8px;
- }
- .hoverTitle {
- font-size: 14px;
- line-height: 20px;
- color: #FFFFFF;
- overflow-wrap: break-word;
- }
- .hoverPath {
- font-size: 12px;
- line-height: 16px;
- color: #CFD3D6;
- word-break: break-all;
- }
- .hoverTime {
- font-size: 12px;
- line-height: 16px;
- color: #CFD3D6;
- }
- .hoverStatus {
- display: flex;
- align-items: center;
- gap: 8px;
- font-size: 12px;
- line-height: 20px;
- color: #ADB2B8;
- }
- .iconButton {
- flex: none;
- display: inline-flex;
- align-items: center;
- justify-content: center;
- width: 16px;
- height: 16px;
- border: none;
- border-radius: 4px;
- padding: 0;
- background: transparent;
- cursor: pointer;
- color: var(--dsw-alias-label-tertiary);
- }
- .iconButton:hover {
- color: var(--dsw-alias-label-primary);
- }
- /* Chevrons ride the caption grey (#ADB2B8); the folder glyph stays one step
- darker (tertiary, #81858C) per the cell spec. */
- .chevron {
- color: var(--dsw-alias-label-caption);
- }
- @media (prefers-reduced-motion: reduce) {
- .sessionRow,
- .arrow {
- animation: none;
- transition: none;
- }
- }
|