tabs.css 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801
  1. [data-component="tabs"] {
  2. --tabs-bar-height: 48px;
  3. --tabs-compact-pill-height: 24px;
  4. --tabs-compact-pill-radius: 6px;
  5. --tabs-compact-pill-padding-x: 4px;
  6. width: 100%;
  7. height: 100%;
  8. display: flex;
  9. flex-direction: column;
  10. background-color: var(--background-stronger);
  11. overflow: clip;
  12. [data-slot="tabs-list"] {
  13. height: 48px;
  14. width: 100%;
  15. position: relative;
  16. display: flex;
  17. align-items: center;
  18. overflow-x: auto;
  19. /* Hide scrollbar */
  20. scrollbar-width: none;
  21. -ms-overflow-style: none;
  22. &::-webkit-scrollbar {
  23. display: none;
  24. }
  25. /* After element to fill remaining space */
  26. &::after {
  27. content: "";
  28. display: block;
  29. flex-grow: 1;
  30. height: 100%;
  31. border-bottom: 1px solid var(--border-weak-base);
  32. background-color: var(--background-base);
  33. }
  34. &:empty::after {
  35. display: none;
  36. }
  37. }
  38. [data-slot="tabs-trigger-wrapper"] {
  39. position: relative;
  40. height: 100%;
  41. display: flex;
  42. align-items: center;
  43. gap: 12px;
  44. color: var(--text-base);
  45. /* text-14-medium */
  46. font-family: var(--font-family-sans);
  47. font-size: 14px;
  48. font-style: normal;
  49. font-weight: var(--font-weight-medium);
  50. line-height: var(--line-height-large); /* 142.857% */
  51. letter-spacing: var(--letter-spacing-normal);
  52. white-space: nowrap;
  53. flex-shrink: 0;
  54. max-width: 280px;
  55. border-bottom: 1px solid var(--border-weak-base);
  56. border-right: 1px solid var(--border-weak-base);
  57. background-color: var(--background-base);
  58. [data-slot="tabs-trigger"] {
  59. display: flex;
  60. align-items: center;
  61. justify-content: center;
  62. padding: 14px 24px 14px 12px;
  63. outline: none;
  64. min-width: 0;
  65. overflow: hidden;
  66. text-overflow: ellipsis;
  67. &:focus-visible {
  68. outline: none;
  69. box-shadow: none;
  70. }
  71. }
  72. [data-slot="tabs-trigger-close-button"] {
  73. display: flex;
  74. align-items: center;
  75. justify-content: center;
  76. }
  77. [data-component="icon-button"] {
  78. margin: -0.25rem;
  79. }
  80. &:disabled {
  81. pointer-events: none;
  82. color: var(--text-weaker);
  83. }
  84. &:focus-visible {
  85. outline: none;
  86. box-shadow: none;
  87. }
  88. &:has([data-selected]) {
  89. color: var(--text-strong);
  90. background-color: transparent;
  91. border-bottom-color: transparent;
  92. [data-slot="tabs-trigger-close-button"] {
  93. opacity: 1;
  94. }
  95. }
  96. &:hover:not(:disabled):not([data-selected]) {
  97. color: var(--text-strong);
  98. }
  99. &:has([data-slot="tabs-trigger-close-button"]) {
  100. padding-right: 12px;
  101. [data-slot="tabs-trigger"] {
  102. padding-right: 0;
  103. }
  104. }
  105. }
  106. [data-slot="tabs-content"] {
  107. overflow-y: auto;
  108. flex: 1;
  109. /* Hide scrollbar */
  110. scrollbar-width: none;
  111. -ms-overflow-style: none;
  112. &::-webkit-scrollbar {
  113. display: none;
  114. }
  115. &:focus-visible {
  116. outline: none;
  117. }
  118. }
  119. #review-panel &[data-variant="normal"][data-orientation="horizontal"],
  120. #terminal-panel &[data-variant="normal"][data-orientation="horizontal"] {
  121. background-color: var(--background-stronger);
  122. [data-slot="tabs-list"] {
  123. height: var(--tabs-bar-height);
  124. padding-left: 12px;
  125. padding-right: 0;
  126. --tabs-review-gap: 16px;
  127. --tabs-review-fade: 16px;
  128. gap: var(--tabs-review-gap);
  129. background-color: var(--background-stronger);
  130. border-bottom: 1px solid var(--border-weaker-base);
  131. &::after {
  132. display: none;
  133. }
  134. > .sticky {
  135. border-bottom: none;
  136. background-color: var(--background-stronger);
  137. &::before {
  138. content: "";
  139. position: absolute;
  140. top: 0;
  141. bottom: 0;
  142. left: calc(var(--tabs-review-fade) * -1);
  143. width: var(--tabs-review-fade);
  144. pointer-events: none;
  145. background: linear-gradient(90deg, transparent, var(--background-stronger));
  146. }
  147. }
  148. }
  149. [data-slot="tabs-trigger-wrapper"] {
  150. height: var(--tabs-compact-pill-height);
  151. margin-block: 0;
  152. max-width: 320px;
  153. padding-inline: var(--tabs-compact-pill-padding-x);
  154. box-sizing: border-box;
  155. border: 1px solid transparent;
  156. border-radius: var(--tabs-compact-pill-radius);
  157. background-color: transparent;
  158. gap: 8px;
  159. color: var(--text-weak);
  160. transition:
  161. color 120ms ease,
  162. background-color 120ms ease,
  163. border-color 120ms ease;
  164. &::after {
  165. content: "";
  166. position: absolute;
  167. left: 0;
  168. right: 0;
  169. bottom: calc((var(--tabs-compact-pill-height) - var(--tabs-bar-height)) / 2);
  170. height: 1px;
  171. background-color: var(--text-strong);
  172. opacity: 0;
  173. transform: scaleX(0.75);
  174. transform-origin: center;
  175. transition:
  176. opacity 120ms ease,
  177. transform 120ms ease;
  178. }
  179. &[data-value="review"] {
  180. padding-left: 8px;
  181. padding-right: 8px;
  182. }
  183. [data-slot="tabs-trigger"] {
  184. height: 100%;
  185. padding: 0 !important;
  186. }
  187. &:has([data-slot="tabs-trigger-close-button"]) {
  188. padding-right: 5px;
  189. [data-slot="tabs-trigger"] {
  190. padding-right: 0 !important;
  191. }
  192. }
  193. &:has([data-selected]) {
  194. color: var(--text-strong);
  195. background-color: var(--surface-base-active);
  196. border-color: var(--border-weak-base);
  197. &::after {
  198. opacity: 1;
  199. transform: scaleX(1);
  200. }
  201. }
  202. &:hover:not(:disabled):not(:has([data-selected])) {
  203. color: var(--text-base);
  204. background-color: var(--surface-base-hover);
  205. }
  206. /*
  207. File tabs: use monochrome icon by default.
  208. Full-color icon is shown on hover/selected.
  209. */
  210. [data-slot="tabs-trigger"] {
  211. .tab-fileicon-color,
  212. .tab-fileicon-mono {
  213. pointer-events: none;
  214. }
  215. .tab-fileicon-color {
  216. display: none;
  217. }
  218. .tab-fileicon-mono {
  219. display: block;
  220. color: currentColor;
  221. }
  222. &[data-selected],
  223. &:hover {
  224. .tab-fileicon-color {
  225. display: block;
  226. }
  227. .tab-fileicon-mono {
  228. display: none;
  229. }
  230. }
  231. }
  232. }
  233. }
  234. #terminal-panel &[data-variant="normal"][data-orientation="horizontal"] {
  235. [data-slot="tabs-list"] {
  236. height: 52px;
  237. padding-right: 12px;
  238. gap: 8px;
  239. }
  240. [data-slot="tabs-trigger-wrapper"] {
  241. height: 28px;
  242. padding-inline: 8px;
  243. border: 0;
  244. background-color: transparent;
  245. box-shadow: none;
  246. &::after {
  247. display: none;
  248. }
  249. [data-slot="tabs-trigger"] {
  250. padding: 0 !important;
  251. }
  252. &:has([data-slot="tabs-trigger-close-button"]) {
  253. padding-right: 8px;
  254. }
  255. &:has([data-selected]) {
  256. background-color: var(--v2-background-bg-layer-01);
  257. box-shadow: inset 0 0 0 0.5px var(--v2-border-border-muted);
  258. }
  259. }
  260. [data-slot="terminal-tab-title"] {
  261. font-family: Inter, sans-serif;
  262. font-style: normal;
  263. font-weight: 440;
  264. font-size: 13px;
  265. line-height: 16px;
  266. letter-spacing: -0.04px;
  267. color: var(--v2-text-text-base);
  268. font-variation-settings: "slnt" 0;
  269. font-variant-numeric: tabular-nums;
  270. }
  271. }
  272. &[data-variant="alt"] {
  273. [data-slot="tabs-list"] {
  274. padding-left: 24px;
  275. padding-right: 24px;
  276. gap: 12px;
  277. border-bottom: 1px solid var(--border-weak-base);
  278. background-color: transparent;
  279. &::after {
  280. border: none;
  281. background-color: transparent;
  282. }
  283. &:empty::after {
  284. display: none;
  285. }
  286. }
  287. [data-slot="tabs-trigger-wrapper"] {
  288. border: none;
  289. color: var(--text-base);
  290. background-color: transparent;
  291. border-bottom-width: 2px;
  292. border-bottom-style: solid;
  293. border-bottom-color: transparent;
  294. gap: 4px;
  295. /* text-14-regular */
  296. font-family: var(--font-family-sans);
  297. font-size: var(--font-size-base);
  298. font-style: normal;
  299. font-weight: var(--font-weight-regular);
  300. line-height: var(--line-height-x-large); /* 171.429% */
  301. letter-spacing: var(--letter-spacing-normal);
  302. [data-slot="tabs-trigger"] {
  303. height: 100%;
  304. padding: 4px;
  305. background-color: transparent;
  306. border-bottom-width: 2px;
  307. border-bottom-color: transparent;
  308. }
  309. [data-slot="tabs-trigger-close-button"] {
  310. display: flex;
  311. align-items: center;
  312. justify-content: center;
  313. }
  314. [data-component="icon-button"] {
  315. width: 16px;
  316. height: 16px;
  317. margin: 0;
  318. }
  319. &:has([data-selected]) {
  320. color: var(--text-strong);
  321. background-color: transparent;
  322. border-bottom-color: var(--icon-strong-base);
  323. }
  324. &:hover:not(:disabled):not([data-selected]) {
  325. color: var(--text-strong);
  326. }
  327. &:has([data-slot="tabs-trigger-close-button"]) {
  328. padding-right: 0;
  329. [data-slot="tabs-trigger"] {
  330. padding-right: 0;
  331. }
  332. }
  333. }
  334. /* [data-slot="tabs-content"] { */
  335. /* } */
  336. }
  337. &[data-variant="pill"][data-orientation="horizontal"] {
  338. background-color: transparent;
  339. [data-slot="tabs-list"] {
  340. height: auto;
  341. padding: 6px 0;
  342. gap: 4px;
  343. background-color: var(--background-base);
  344. &::after {
  345. display: none;
  346. }
  347. }
  348. [data-slot="tabs-trigger-wrapper"] {
  349. height: 32px;
  350. border: none;
  351. border-radius: var(--radius-sm);
  352. background-color: transparent;
  353. gap: 0;
  354. /* text-13-medium */
  355. font-family: var(--font-family-sans);
  356. font-size: var(--font-size-small);
  357. font-style: normal;
  358. font-weight: var(--font-weight-medium);
  359. line-height: var(--line-height-large);
  360. letter-spacing: var(--letter-spacing-normal);
  361. [data-slot="tabs-trigger"] {
  362. height: 100%;
  363. width: 100%;
  364. padding: 0 12px;
  365. background-color: transparent;
  366. }
  367. &:hover:not(:disabled) {
  368. background-color: var(--surface-base-hover);
  369. color: var(--text-strong);
  370. }
  371. &:active:not(:disabled) {
  372. background-color: var(--surface-base-active);
  373. }
  374. &:has([data-selected]) {
  375. background-color: var(--surface-base-active);
  376. color: var(--text-strong);
  377. &:hover:not(:disabled) {
  378. background-color: var(--surface-base-active);
  379. }
  380. }
  381. }
  382. }
  383. &[data-variant="pill"][data-orientation="horizontal"][data-scope="filetree"] {
  384. [data-slot="tabs-list"] {
  385. height: 48px;
  386. padding-inline: 12px;
  387. gap: 8px;
  388. align-items: center;
  389. background-color: var(--background-stronger);
  390. box-sizing: border-box;
  391. border-bottom: 1px solid var(--border-weak-base);
  392. }
  393. [data-slot="tabs-trigger-wrapper"] {
  394. height: var(--tabs-compact-pill-height);
  395. border-radius: var(--tabs-compact-pill-radius);
  396. color: var(--text-weak);
  397. box-sizing: border-box;
  398. border: 1px solid transparent;
  399. transition:
  400. color 120ms ease,
  401. background-color 120ms ease,
  402. border-color 120ms ease;
  403. &:not(:has([data-selected])):hover:not(:disabled) {
  404. color: var(--text-base);
  405. }
  406. &:has([data-selected]) {
  407. color: var(--text-strong);
  408. border-color: var(--border-weak-base);
  409. }
  410. }
  411. }
  412. &[data-orientation="vertical"] {
  413. flex-direction: row;
  414. [data-slot="tabs-list"] {
  415. flex-direction: column;
  416. width: auto;
  417. height: 100%;
  418. overflow-x: hidden;
  419. overflow-y: auto;
  420. padding: 8px;
  421. gap: 4px;
  422. background-color: var(--background-base);
  423. border-right: 1px solid var(--border-weak-base);
  424. &::after {
  425. display: none;
  426. }
  427. }
  428. [data-slot="tabs-trigger-wrapper"] {
  429. width: 100%;
  430. height: 32px;
  431. border: none;
  432. border-radius: 8px;
  433. background-color: transparent;
  434. [data-slot="tabs-trigger"] {
  435. height: 100%;
  436. padding: 0 8px;
  437. gap: 8px;
  438. justify-content: flex-start;
  439. }
  440. &:hover:not(:disabled) {
  441. background-color: var(--surface-base-hover);
  442. }
  443. &:has([data-selected]) {
  444. background-color: var(--surface-base-active);
  445. color: var(--text-strong);
  446. }
  447. }
  448. [data-slot="tabs-content"] {
  449. overflow-x: auto;
  450. overflow-y: auto;
  451. }
  452. &[data-variant="alt"] {
  453. [data-slot="tabs-list"] {
  454. padding: 8px;
  455. gap: 4px;
  456. border: none;
  457. &::after {
  458. display: none;
  459. }
  460. }
  461. [data-slot="tabs-trigger-wrapper"] {
  462. height: 32px;
  463. border: none;
  464. border-radius: 8px;
  465. [data-slot="tabs-trigger"] {
  466. border: none;
  467. padding: 0 8px;
  468. gap: 8px;
  469. justify-content: flex-start;
  470. }
  471. &:hover:not(:disabled) {
  472. background-color: var(--surface-base-hover);
  473. }
  474. &:has([data-selected]) {
  475. background-color: var(--surface-base-hover);
  476. color: var(--text-strong);
  477. }
  478. }
  479. }
  480. &[data-variant="settings"] {
  481. [data-slot="tabs-list"] {
  482. width: 150px;
  483. min-width: 150px;
  484. @media (min-width: 640px) {
  485. width: 200px;
  486. min-width: 200px;
  487. }
  488. padding: 12px;
  489. gap: 0;
  490. background-color: var(--background-base);
  491. border-right: 1px solid var(--border-weak-base);
  492. &::after {
  493. display: none;
  494. }
  495. }
  496. [data-slot="tabs-section-title"] {
  497. width: 100%;
  498. padding: 0 0 0 4px;
  499. font-family: var(--font-family-sans);
  500. font-size: var(--font-size-small);
  501. font-weight: var(--font-weight-medium);
  502. color: var(--text-weak);
  503. }
  504. [data-slot="tabs-trigger-wrapper"] {
  505. height: 32px;
  506. border: none;
  507. border-radius: var(--radius-md);
  508. /* text-14-medium */
  509. font-family: var(--font-family-sans);
  510. font-size: var(--font-size-base);
  511. font-weight: var(--font-weight-medium);
  512. line-height: var(--line-height-large);
  513. [data-slot="tabs-trigger"] {
  514. border: none;
  515. padding: 0 8px;
  516. gap: 12px;
  517. justify-content: flex-start;
  518. width: 100%;
  519. height: 100%;
  520. }
  521. [data-component="icon"] {
  522. color: var(--icon-base);
  523. }
  524. &:hover:not(:disabled) {
  525. background-color: var(--surface-base-hover);
  526. }
  527. &:has([data-slot="tabs-trigger"]:focus-visible) {
  528. background-color: var(--surface-base-hover);
  529. box-shadow: var(--shadow-xs-border-focus);
  530. }
  531. &:has([data-selected]) {
  532. background-color: var(--surface-base-active);
  533. color: var(--text-strong);
  534. [data-component="icon"] {
  535. color: var(--icon-strong-base);
  536. }
  537. &:hover:not(:disabled) {
  538. background-color: var(--surface-base-active);
  539. }
  540. }
  541. }
  542. [data-slot="tabs-content"] {
  543. background-color: var(--surface-stronger-non-alpha);
  544. }
  545. }
  546. }
  547. }
  548. [data-component="tabs-drag-preview"] {
  549. position: relative;
  550. display: flex;
  551. align-items: center;
  552. height: var(--tabs-bar-height, 48px);
  553. max-width: 320px;
  554. padding-inline: var(--tabs-compact-pill-padding-x, 4px);
  555. overflow: hidden;
  556. color: var(--text-strong);
  557. opacity: 0.6;
  558. }
  559. [data-component="tabs-drag-preview"]::before {
  560. content: "";
  561. position: absolute;
  562. left: 0;
  563. right: 0;
  564. top: calc((var(--tabs-bar-height, 48px) - var(--tabs-compact-pill-height, 24px)) / 2);
  565. height: var(--tabs-compact-pill-height, 24px);
  566. border: 1px solid var(--border-weak-base);
  567. border-radius: var(--tabs-compact-pill-radius, 6px);
  568. background-color: var(--surface-base-active);
  569. }
  570. [data-component="tabs-drag-preview"]::after {
  571. content: "";
  572. position: absolute;
  573. left: 0;
  574. right: 0;
  575. bottom: 0;
  576. height: 1px;
  577. background-color: var(--text-strong);
  578. }
  579. [data-component="tabs-drag-preview"] > * {
  580. position: relative;
  581. }
  582. body[data-new-layout] #review-panel [data-component="tabs"],
  583. body[data-new-layout] #terminal-panel [data-component="tabs"],
  584. body[data-new-layout] #review-panel [data-component="tabs"][data-variant="normal"][data-orientation="horizontal"],
  585. body[data-new-layout] #terminal-panel [data-component="tabs"][data-variant="normal"][data-orientation="horizontal"] {
  586. background-color: var(--v2-background-bg-base);
  587. [data-slot="tabs-list"] {
  588. background-color: var(--v2-background-bg-base);
  589. > .sticky {
  590. background-color: var(--v2-background-bg-base);
  591. &::before {
  592. background: linear-gradient(90deg, transparent, var(--v2-background-bg-base));
  593. }
  594. }
  595. }
  596. }
  597. body[data-new-layout] #review-panel [data-component="tabs"][data-variant="normal"][data-orientation="horizontal"] {
  598. [data-slot="tabs-list"] {
  599. height: 52px;
  600. padding-right: 12px;
  601. gap: 8px;
  602. --tabs-review-fade: 8px;
  603. }
  604. [data-slot="tabs-trigger-wrapper"] {
  605. height: 28px;
  606. padding-inline: 10px;
  607. border: 0;
  608. background-color: transparent;
  609. box-shadow: none;
  610. &::after {
  611. display: none;
  612. }
  613. [data-slot="tabs-trigger"] {
  614. padding: 0 !important;
  615. }
  616. &:has([data-slot="tabs-trigger-close-button"]) {
  617. padding-right: 10px;
  618. }
  619. &:has([data-selected]) {
  620. background-color: var(--v2-background-bg-layer-02);
  621. box-shadow: none;
  622. }
  623. }
  624. [data-slot="tabs-trigger"] {
  625. font-family: Inter, sans-serif;
  626. font-style: normal;
  627. font-weight: 440;
  628. font-size: 13px;
  629. line-height: 16px;
  630. letter-spacing: -0.04px;
  631. color: var(--v2-text-text-muted);
  632. font-variation-settings: "slnt" 0;
  633. font-variant-numeric: tabular-nums;
  634. &[data-selected] {
  635. color: var(--v2-text-text-base);
  636. }
  637. .tab-fileicon-color,
  638. .tab-fileicon-mono,
  639. [data-slot="icon-svg"] {
  640. margin-left: -2px;
  641. }
  642. }
  643. /* Preview/temporary tabs: beat trigger + .text-14-medium upright defaults */
  644. [data-slot="tabs-trigger"] .italic {
  645. font-style: italic !important;
  646. font-variation-settings: "slnt" -10 !important;
  647. }
  648. }
  649. body[data-new-layout] #review-panel [data-component="tabs"] .session-review-v2-tabs-bar {
  650. width: 100%;
  651. min-width: 0;
  652. gap: 8px;
  653. box-sizing: border-box;
  654. border-bottom: 1px solid var(--border-weaker-base, var(--v2-border-border-weak));
  655. background-color: var(--v2-background-bg-base);
  656. }
  657. body[data-new-layout] #review-panel [data-component="tabs"] .session-review-v2-tabs-bar [data-slot="tabs-list"],
  658. body[data-new-layout]
  659. #review-panel
  660. [data-component="tabs"][data-variant="normal"][data-orientation="horizontal"]
  661. .session-review-v2-tabs-bar
  662. [data-slot="tabs-list"] {
  663. flex: 1 1 0;
  664. min-width: 0;
  665. width: auto;
  666. border-bottom: none;
  667. }
  668. body[data-new-layout]
  669. #review-panel
  670. [data-component="tabs"]
  671. .session-review-v2-tabs-bar
  672. [data-slot="tabs-list"]
  673. > .sticky {
  674. padding-right: 0;
  675. }
  676. body[data-new-layout] #review-panel [data-component="tabs"] .session-review-v2-open-in-app-slot {
  677. flex-shrink: 0;
  678. margin-left: auto;
  679. }
  680. body[data-new-layout] #review-panel [data-component="tabs"] .session-review-v2-open-in-app {
  681. flex-shrink: 0;
  682. }