share.module.css 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831
  1. .root {
  2. display: flex;
  3. flex-direction: column;
  4. gap: 2.5rem;
  5. line-height: 1;
  6. padding: 1.5rem;
  7. @media (max-width: 30rem) {
  8. padding: 1rem;
  9. gap: 2rem;
  10. }
  11. --sm-tool-width: 28rem;
  12. --md-tool-width: 40rem;
  13. --lg-tool-width: 56rem;
  14. --term-icon: url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2060%2016'%20preserveAspectRatio%3D'xMidYMid%20meet'%3E%3Ccircle%20cx%3D'8'%20cy%3D'8'%20r%3D'8'%2F%3E%3Ccircle%20cx%3D'30'%20cy%3D'8'%20r%3D'8'%2F%3E%3Ccircle%20cx%3D'52'%20cy%3D'8'%20r%3D'8'%2F%3E%3C%2Fsvg%3E");
  15. [data-component="header"] {
  16. display: flex;
  17. flex-direction: column;
  18. gap: 1rem;
  19. @media (max-width: 30rem) {
  20. gap: 1rem;
  21. }
  22. }
  23. [data-component="header-title"] {
  24. font-size: 2.75rem;
  25. font-weight: 500;
  26. line-height: 1.2;
  27. letter-spacing: -0.05em;
  28. display: -webkit-box;
  29. -webkit-box-orient: vertical;
  30. -webkit-line-clamp: 3;
  31. line-clamp: 3;
  32. overflow: hidden;
  33. @media (max-width: 30rem) {
  34. font-size: 1.75rem;
  35. line-height: 1.25;
  36. -webkit-line-clamp: 3;
  37. }
  38. }
  39. [data-component="header-details"] {
  40. display: flex;
  41. flex-direction: column;
  42. gap: 0.5rem;
  43. }
  44. [data-component="header-stats"] {
  45. list-style-type: none;
  46. padding: 0;
  47. margin: 0;
  48. display: flex;
  49. gap: 0.5rem 0.875rem;
  50. flex-wrap: wrap;
  51. [data-slot="item"] {
  52. display: flex;
  53. align-items: center;
  54. gap: 0.3125rem;
  55. font-size: 0.875rem;
  56. span[data-placeholder] {
  57. color: var(--sl-color-text-dimmed);
  58. }
  59. }
  60. [data-slot="icon"] {
  61. flex: 0 0 auto;
  62. color: var(--sl-color-text-dimmed);
  63. opacity: 0.85;
  64. svg {
  65. display: block;
  66. }
  67. }
  68. [data-slot="model"] {
  69. color: var(--sl-color-text);
  70. }
  71. }
  72. [data-component="header-time"] {
  73. color: var(--sl-color-text-dimmed);
  74. font-size: 0.875rem;
  75. }
  76. [data-component="text-button"] {
  77. cursor: pointer;
  78. appearance: none;
  79. background-color: transparent;
  80. border: none;
  81. padding: 0;
  82. color: var(--sl-color-text-secondary);
  83. &:hover {
  84. color: var(--sl-color-text);
  85. }
  86. &[data-element-button-more] {
  87. display: flex;
  88. align-items: center;
  89. gap: 0.125rem;
  90. span[data-button-icon] {
  91. line-height: 1;
  92. opacity: 0.85;
  93. svg {
  94. display: block;
  95. }
  96. }
  97. }
  98. }
  99. }
  100. .parts {
  101. display: flex;
  102. flex-direction: column;
  103. gap: 0.625rem;
  104. [data-section="part"] {
  105. display: flex;
  106. gap: 0.625rem;
  107. & > [data-section="decoration"] {
  108. flex: 0 0 auto;
  109. display: flex;
  110. flex-direction: column;
  111. gap: 0.625rem;
  112. align-items: center;
  113. justify-content: flex-start;
  114. [data-element-anchor] {
  115. position: relative;
  116. a:first-child {
  117. display: block;
  118. flex: 0 0 auto;
  119. width: 18px;
  120. opacity: 0.65;
  121. svg {
  122. color: var(--sl-color-text-secondary);
  123. display: block;
  124. &:nth-child(3) {
  125. color: var(--sl-color-green-high);
  126. }
  127. }
  128. svg:nth-child(2),
  129. svg:nth-child(3) {
  130. display: none;
  131. }
  132. &:hover {
  133. svg:nth-child(1) {
  134. display: none;
  135. }
  136. svg:nth-child(2) {
  137. display: block;
  138. }
  139. }
  140. }
  141. [data-element-tooltip] {
  142. position: absolute;
  143. top: 50%;
  144. left: calc(100% + 12px);
  145. transform: translate(0, -50%);
  146. line-height: 1.1;
  147. padding: 0.375em 0.5em calc(0.375em + 2px);
  148. background: var(--sl-color-white);
  149. color: var(--sl-color-text-invert);
  150. font-size: 0.6875rem;
  151. border-radius: 7px;
  152. white-space: nowrap;
  153. z-index: 1;
  154. opacity: 0;
  155. visibility: hidden;
  156. &::after {
  157. content: "";
  158. position: absolute;
  159. top: 50%;
  160. left: -15px;
  161. transform: translateY(-50%);
  162. border: 8px solid transparent;
  163. border-right-color: var(--sl-color-white);
  164. }
  165. }
  166. &[data-status="copied"] {
  167. [data-element-tooltip] {
  168. opacity: 1;
  169. visibility: visible;
  170. }
  171. a,
  172. a:hover {
  173. svg:nth-child(1),
  174. svg:nth-child(2) {
  175. display: none;
  176. }
  177. svg:nth-child(3) {
  178. display: block;
  179. }
  180. }
  181. }
  182. }
  183. div:last-child {
  184. width: 3px;
  185. height: 100%;
  186. border-radius: 1px;
  187. background-color: var(--sl-color-hairline);
  188. }
  189. }
  190. & > [data-section="content"] {
  191. flex: 1 1 auto;
  192. min-width: 0;
  193. padding: 0 0 0.375rem;
  194. display: flex;
  195. flex-direction: column;
  196. gap: 1rem;
  197. [data-part-tool-body] {
  198. display: flex;
  199. flex-direction: column;
  200. align-items: flex-start;
  201. gap: 0.375rem;
  202. }
  203. [data-part-title] {
  204. line-height: 18px;
  205. font-size: 0.875rem;
  206. color: var(--sl-color-text-secondary);
  207. max-width: var(--md-tool-width);
  208. display: flex;
  209. align-items: flex-start;
  210. gap: 0.375rem;
  211. span[data-element-label] {
  212. color: var(--sl-color-text-secondary);
  213. }
  214. b {
  215. color: var(--sl-color-text);
  216. word-break: break-all;
  217. font-weight: 500;
  218. }
  219. }
  220. span[data-part-footer] {
  221. align-self: flex-start;
  222. font-size: 0.75rem;
  223. color: var(--sl-color-text-dimmed);
  224. }
  225. span[data-part-model] {
  226. line-height: 1.5;
  227. }
  228. [data-part-tool-args] {
  229. display: inline-grid;
  230. align-items: center;
  231. grid-template-columns: max-content max-content minmax(0, 1fr);
  232. max-width: var(--md-tool-width);
  233. gap: 0.25rem 0.375rem;
  234. & > div:nth-child(3n + 1) {
  235. width: 8px;
  236. height: 2px;
  237. border-radius: 1px;
  238. background: var(--sl-color-divider);
  239. }
  240. & > div:nth-child(3n + 2),
  241. & > div:nth-child(3n + 3) {
  242. font-size: 0.75rem;
  243. line-height: 1.5;
  244. }
  245. & > div:nth-child(3n + 3) {
  246. padding-left: 0.125rem;
  247. word-break: break-word;
  248. color: var(--sl-color-text-secondary);
  249. }
  250. }
  251. [data-part-tool-result] {
  252. display: flex;
  253. flex-direction: column;
  254. align-items: flex-start;
  255. gap: 0.5rem;
  256. button {
  257. font-size: 0.75rem;
  258. }
  259. }
  260. [data-part-tool-edit] {
  261. width: 100%;
  262. max-width: var(--lg-tool-width);
  263. }
  264. }
  265. }
  266. /* Part types */
  267. [data-part-type="user-text"],
  268. [data-part-type="ai-text"],
  269. [data-part-type="ai-model"],
  270. [data-part-type="system-text"],
  271. [data-part-type="fallback"] {
  272. & > [data-section="content"] {
  273. padding-bottom: 1rem;
  274. }
  275. }
  276. [data-part-type="tool-list"],
  277. [data-part-type="tool-glob"],
  278. [data-part-type="tool-read"],
  279. [data-part-type="tool-edit"],
  280. [data-part-type="tool-write"],
  281. [data-part-type="tool-fetch"] {
  282. & > [data-section="content"] > [data-part-tool-body] {
  283. gap: 0.5rem;
  284. }
  285. }
  286. [data-part-type="tool-grep"] {
  287. &:not(:has([data-part-tool-args])) > [data-section="content"] > [data-part-tool-body] {
  288. gap: 0.5rem;
  289. }
  290. }
  291. [data-part-type="tool-write"],
  292. [data-part-type="tool-read"],
  293. [data-part-type="tool-fetch"] {
  294. [data-part-tool-result] {
  295. [data-part-tool-code] {
  296. max-width: var(--md-tool-width);
  297. border: 1px solid var(--sl-color-divider);
  298. background-color: var(--sl-color-bg-surface);
  299. border-radius: 0.25rem;
  300. padding: 0.5rem calc(0.5rem + 3px);
  301. pre {
  302. line-height: 1.6;
  303. font-size: 0.75rem;
  304. white-space: pre-wrap;
  305. word-break: break-word;
  306. }
  307. }
  308. }
  309. }
  310. [data-part-type="summary"] {
  311. & > [data-section="decoration"] {
  312. span:first-child {
  313. flex: 0 0 auto;
  314. display: block;
  315. margin: 2px;
  316. width: 14px;
  317. height: 14px;
  318. border-radius: 50%;
  319. background-color: var(--sl-color-divider);
  320. &[data-status="connected"] {
  321. background-color: var(--sl-color-green);
  322. }
  323. &[data-status="connecting"] {
  324. background-color: var(--sl-color-orange);
  325. }
  326. &[data-status="disconnected"] {
  327. background-color: var(--sl-color-divider);
  328. }
  329. &[data-status="reconnecting"] {
  330. background-color: var(--sl-color-orange);
  331. }
  332. &[data-status="error"] {
  333. background-color: var(--sl-color-red);
  334. }
  335. }
  336. }
  337. & > [data-section="content"] {
  338. display: flex;
  339. flex-direction: column;
  340. gap: 0.5rem;
  341. p[data-section="copy"] {
  342. display: block;
  343. line-height: 18px;
  344. font-size: 0.875rem;
  345. color: var(--sl-color-text-dimmed);
  346. }
  347. [data-section="stats"] {
  348. list-style-type: none;
  349. padding: 0;
  350. margin: 0;
  351. display: flex;
  352. gap: 0.5rem 0.875rem;
  353. flex-wrap: wrap;
  354. li {
  355. display: flex;
  356. align-items: center;
  357. gap: 0.5rem;
  358. font-size: 0.75rem;
  359. color: var(--sl-color-text-secondary);
  360. span[data-placeholder] {
  361. color: var(--sl-color-text-dimmed);
  362. }
  363. }
  364. }
  365. }
  366. }
  367. }
  368. .message-text {
  369. background-color: var(--sl-color-bg-surface);
  370. padding: 0.5rem calc(0.5rem + 3px);
  371. border-radius: 0.25rem;
  372. display: flex;
  373. flex-direction: column;
  374. align-items: flex-start;
  375. gap: 1rem;
  376. align-self: flex-start;
  377. max-width: var(--md-tool-width);
  378. &[data-size="sm"] {
  379. pre {
  380. font-size: 0.75rem;
  381. }
  382. }
  383. &[data-color="dimmed"] {
  384. pre {
  385. color: var(--sl-color-text-dimmed);
  386. }
  387. }
  388. pre {
  389. line-height: 1.5;
  390. font-size: 0.875rem;
  391. white-space: pre-wrap;
  392. overflow-wrap: anywhere;
  393. color: var(--sl-color-text);
  394. }
  395. button {
  396. flex: 0 0 auto;
  397. padding: 2px 0;
  398. font-size: 0.75rem;
  399. }
  400. &[data-invert="true"] {
  401. background-color: var(--sl-color-blue-high);
  402. pre {
  403. color: var(--sl-color-text-invert);
  404. }
  405. button {
  406. opacity: 0.85;
  407. color: var(--sl-color-text-invert);
  408. &:hover {
  409. opacity: 1;
  410. }
  411. }
  412. }
  413. &[data-background="none"] {
  414. background-color: transparent;
  415. }
  416. &[data-background="blue"] {
  417. background-color: var(--sl-color-blue-low);
  418. }
  419. &[data-expanded="true"] {
  420. pre {
  421. display: block;
  422. }
  423. }
  424. &[data-expanded="false"] {
  425. pre {
  426. display: -webkit-box;
  427. -webkit-box-orient: vertical;
  428. -webkit-line-clamp: 3;
  429. overflow: hidden;
  430. }
  431. }
  432. }
  433. .message-error {
  434. background-color: var(--sl-color-bg-surface);
  435. padding: 0.5rem calc(0.5rem + 3px);
  436. border-radius: 0.25rem;
  437. display: flex;
  438. flex-direction: column;
  439. align-items: flex-start;
  440. gap: 1rem;
  441. align-self: flex-start;
  442. max-width: var(--md-tool-width);
  443. [data-section="content"] {
  444. pre {
  445. margin-bottom: 0.5rem;
  446. line-height: 1.5;
  447. font-size: 0.75rem;
  448. white-space: pre-wrap;
  449. word-break: break-word;
  450. &:last-child {
  451. margin-bottom: 0;
  452. }
  453. span {
  454. margin-right: 0.25rem;
  455. &:last-child {
  456. margin-right: 0;
  457. }
  458. }
  459. span[data-color="red"] {
  460. color: var(--sl-color-red);
  461. }
  462. span[data-color="dimmed"] {
  463. color: var(--sl-color-text-dimmed);
  464. }
  465. span[data-marker="label"] {
  466. text-transform: uppercase;
  467. letter-spacing: -0.5px;
  468. }
  469. span[data-separator] {
  470. margin-right: 0.375rem;
  471. }
  472. }
  473. }
  474. &[data-expanded="true"] {
  475. [data-section="content"] {
  476. display: block;
  477. }
  478. }
  479. &[data-expanded="false"] {
  480. [data-section="content"] {
  481. display: -webkit-box;
  482. -webkit-box-orient: vertical;
  483. -webkit-line-clamp: 7;
  484. overflow: hidden;
  485. }
  486. }
  487. button {
  488. flex: 0 0 auto;
  489. padding: 2px 0;
  490. font-size: 0.75rem;
  491. }
  492. }
  493. .message-terminal {
  494. display: flex;
  495. flex-direction: column;
  496. align-items: flex-start;
  497. gap: 0.5rem;
  498. width: 100%;
  499. max-width: var(--sm-tool-width);
  500. & > [data-section="body"] {
  501. width: 100%;
  502. border: 1px solid var(--sl-color-divider);
  503. border-radius: 0.25rem;
  504. [data-section="header"] {
  505. position: relative;
  506. border-bottom: 1px solid var(--sl-color-divider);
  507. width: 100%;
  508. height: 1.625rem;
  509. text-align: center;
  510. padding: 0 3.25rem;
  511. & > span {
  512. max-width: min(100%, 140ch);
  513. display: inline-block;
  514. white-space: nowrap;
  515. overflow: hidden;
  516. line-height: 1.625rem;
  517. font-size: 0.75rem;
  518. text-overflow: ellipsis;
  519. color: var(--sl-color-text-dimmed);
  520. }
  521. &::before {
  522. content: "";
  523. position: absolute;
  524. pointer-events: none;
  525. top: 8px;
  526. left: 10px;
  527. width: 2rem;
  528. height: 0.5rem;
  529. line-height: 0;
  530. background-color: var(--sl-color-hairline);
  531. mask-image: var(--term-icon);
  532. mask-repeat: no-repeat;
  533. }
  534. }
  535. }
  536. [data-section="content"] {
  537. padding: 0.5rem calc(0.5rem + 3px);
  538. pre {
  539. --shiki-dark-bg: var(--sl-color-bg) !important;
  540. background-color: var(--sl-color-bg) !important;
  541. line-height: 1.6;
  542. font-size: 0.75rem;
  543. white-space: pre-wrap;
  544. word-break: break-word;
  545. }
  546. }
  547. [data-section="error"] {
  548. pre {
  549. color: var(--sl-color-red) !important;
  550. --shiki-dark: var(--sl-color-red) !important;
  551. }
  552. }
  553. &[data-expanded="true"] {
  554. pre {
  555. display: block;
  556. }
  557. }
  558. &[data-expanded="false"] {
  559. pre {
  560. display: -webkit-box;
  561. -webkit-box-orient: vertical;
  562. -webkit-line-clamp: 7;
  563. overflow: hidden;
  564. }
  565. }
  566. button {
  567. flex: 0 0 auto;
  568. padding-left: 1px;
  569. font-size: 0.75rem;
  570. }
  571. }
  572. .message-markdown {
  573. border: 1px solid var(--sl-color-blue-high);
  574. padding: 0.5rem calc(0.5rem + 3px);
  575. border-radius: 0.25rem;
  576. display: flex;
  577. flex-direction: column;
  578. align-items: flex-start;
  579. gap: 1rem;
  580. align-self: flex-start;
  581. max-width: var(--md-tool-width);
  582. button {
  583. flex: 0 0 auto;
  584. padding: 2px 0;
  585. font-size: 0.75rem;
  586. }
  587. &[data-highlight="true"] {
  588. background-color: var(--sl-color-blue-low);
  589. }
  590. &[data-expanded="true"] {
  591. [data-element-markdown] {
  592. display: block;
  593. }
  594. }
  595. &[data-expanded="false"] {
  596. [data-element-markdown] {
  597. display: -webkit-box;
  598. -webkit-box-orient: vertical;
  599. -webkit-line-clamp: 3;
  600. overflow: hidden;
  601. }
  602. }
  603. }
  604. .diff-code-block {
  605. pre {
  606. line-height: 1.25;
  607. font-size: 0.75rem;
  608. }
  609. }
  610. .todos {
  611. list-style-type: none;
  612. padding: 0;
  613. margin: 0;
  614. width: 100%;
  615. max-width: var(--sm-tool-width);
  616. border: 1px solid var(--sl-color-divider);
  617. border-radius: 0.25rem;
  618. li {
  619. margin: 0;
  620. position: relative;
  621. padding-left: 1.5rem;
  622. font-size: 0.75rem;
  623. padding: 0.375rem 0.625rem 0.375rem 1.75rem;
  624. border-bottom: 1px solid var(--sl-color-divider);
  625. line-height: 1.5;
  626. word-break: break-word;
  627. &:last-child {
  628. border-bottom: none;
  629. }
  630. & > span {
  631. position: absolute;
  632. display: inline-block;
  633. left: 0.5rem;
  634. top: calc(0.5rem + 1px);
  635. width: 0.75rem;
  636. height: 0.75rem;
  637. border: 1px solid var(--sl-color-divider);
  638. border-radius: 0.15rem;
  639. &::before {
  640. }
  641. }
  642. &[data-status="pending"] {
  643. color: var(--sl-color-text);
  644. }
  645. &[data-status="in_progress"] {
  646. color: var(--sl-color-text);
  647. & > span {
  648. border-color: var(--sl-color-orange);
  649. }
  650. & > span::before {
  651. content: "";
  652. position: absolute;
  653. top: 2px;
  654. left: 2px;
  655. width: calc(0.75rem - 2px - 4px);
  656. height: calc(0.75rem - 2px - 4px);
  657. box-shadow: inset 1rem 1rem var(--sl-color-orange-low);
  658. }
  659. }
  660. &[data-status="completed"] {
  661. color: var(--sl-color-text-secondary);
  662. & > span {
  663. border-color: var(--sl-color-green-low);
  664. }
  665. & > span::before {
  666. content: "";
  667. position: absolute;
  668. top: 2px;
  669. left: 2px;
  670. width: calc(0.75rem - 2px - 4px);
  671. height: calc(0.75rem - 2px - 4px);
  672. box-shadow: inset 1rem 1rem var(--sl-color-green);
  673. transform-origin: bottom left;
  674. clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);
  675. }
  676. }
  677. }
  678. }
  679. .scroll-button {
  680. position: fixed;
  681. bottom: 2rem;
  682. right: 2rem;
  683. width: 2.5rem;
  684. height: 2.5rem;
  685. border-radius: 0.25rem;
  686. border: 1px solid var(--sl-color-divider);
  687. background-color: var(--sl-color-bg-surface);
  688. color: var(--sl-color-text-secondary);
  689. cursor: pointer;
  690. display: flex;
  691. align-items: center;
  692. justify-content: center;
  693. transition:
  694. all 0.15s ease,
  695. opacity 0.5s ease;
  696. z-index: 100;
  697. appearance: none;
  698. opacity: 1;
  699. &:active {
  700. transform: translateY(1px);
  701. }
  702. svg {
  703. display: block;
  704. }
  705. }