share.module.css 17 KB

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