@adatechnology/conversations-ui 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +126 -19
  2. package/dist/{chunk-HOKNKXIT.js → chunk-HMCOTZAX.js} +1 -1
  3. package/dist/{chunk-FAQLC3TX.js → chunk-L3OFAQPS.js} +2 -4
  4. package/dist/{chunk-CBYEHPX6.js → chunk-PJNR6UMN.js} +63 -1
  5. package/dist/flows/index.js +3 -5
  6. package/dist/index.js +834 -764
  7. package/dist/participant/index.d.ts +18 -1
  8. package/dist/participant/index.js +1188 -313
  9. package/dist/preview/index.js +2 -3
  10. package/dist/styles.css +583 -19
  11. package/package.json +3 -3
  12. package/src/participant/ParticipantAuthorAvatar.test.tsx +30 -0
  13. package/src/participant/ParticipantAuthorAvatar.tsx +24 -0
  14. package/src/participant/ParticipantBackButton.tsx +14 -0
  15. package/src/participant/ParticipantBubbleStatus.tsx +67 -0
  16. package/src/participant/ParticipantChannelBadges.tsx +13 -4
  17. package/src/participant/ParticipantComposer.tsx +8 -40
  18. package/src/participant/ParticipantComposerControls.tsx +83 -0
  19. package/src/participant/ParticipantConversationAvatar.tsx +13 -0
  20. package/src/participant/ParticipantConversations.tsx +7 -0
  21. package/src/participant/ParticipantConversationsOptions.test.tsx +87 -0
  22. package/src/participant/ParticipantCopyAnnouncer.tsx +48 -0
  23. package/src/participant/ParticipantCopyableToken.tsx +51 -0
  24. package/src/participant/ParticipantDayDivider.tsx +18 -0
  25. package/src/participant/ParticipantInbox.tsx +3 -1
  26. package/src/participant/ParticipantInboxRow.tsx +6 -4
  27. package/src/participant/ParticipantMessageBubble.test.tsx +52 -5
  28. package/src/participant/ParticipantMessageBubble.tsx +25 -81
  29. package/src/participant/ParticipantMessageNodes.tsx +54 -0
  30. package/src/participant/ParticipantMessageText.test.tsx +106 -0
  31. package/src/participant/ParticipantMessageText.tsx +52 -0
  32. package/src/participant/ParticipantProtocolBadge.tsx +15 -7
  33. package/src/participant/ParticipantProtocolView.test.tsx +4 -6
  34. package/src/participant/ParticipantScrollToLatest.test.tsx +153 -0
  35. package/src/participant/ParticipantScrollToLatest.tsx +40 -0
  36. package/src/participant/ParticipantThread.test.tsx +37 -0
  37. package/src/participant/ParticipantThread.tsx +45 -95
  38. package/src/participant/ParticipantThreadAvatarSequence.test.tsx +65 -0
  39. package/src/participant/ParticipantThreadHeader.test.tsx +181 -0
  40. package/src/participant/ParticipantThreadHeader.tsx +73 -0
  41. package/src/participant/ParticipantThreadScreen.tsx +24 -10
  42. package/src/participant/ParticipantTimeline.tsx +103 -0
  43. package/src/participant/index.ts +1 -0
  44. package/src/participant/participantAutoGrow.test.ts +43 -0
  45. package/src/participant/participantAutoGrow.ts +12 -0
  46. package/src/participant/participantAvatar.test.ts +74 -0
  47. package/src/participant/participantAvatar.ts +48 -0
  48. package/src/participant/participantBubbleTail.test.tsx +107 -0
  49. package/src/participant/participantChatDesign.test.tsx +198 -0
  50. package/src/participant/participantCopyAnnouncement.test.ts +52 -0
  51. package/src/participant/participantCopyAnnouncement.ts +37 -0
  52. package/src/participant/participantCss.test-helper.ts +34 -0
  53. package/src/participant/participantDay.test.ts +22 -0
  54. package/src/participant/participantDay.ts +8 -0
  55. package/src/participant/participantDocuments.ts +45 -0
  56. package/src/participant/participantHeaderA11y.test.tsx +85 -0
  57. package/src/participant/participantHeaderDesign.test.tsx +111 -0
  58. package/src/participant/participantLabels.ts +11 -0
  59. package/src/participant/participantMessageAtoms.ts +53 -0
  60. package/src/participant/participantMessageCopyables.test.ts +141 -0
  61. package/src/participant/participantMessageCopyables.ts +76 -0
  62. package/src/participant/participantMessageFormat.test-helper.ts +21 -0
  63. package/src/participant/participantMessageFormat.test.ts +177 -0
  64. package/src/participant/participantMessageFormat.ts +135 -0
  65. package/src/participant/participantMessageFormat.types.ts +22 -0
  66. package/src/participant/participantMessageInline.test.ts +82 -0
  67. package/src/participant/participantMessageInline.ts +99 -0
  68. package/src/participant/participantMessageLinks.test.ts +100 -0
  69. package/src/participant/participantMessageLinks.ts +54 -0
  70. package/src/participant/participantMessageTextStyle.test.ts +137 -0
  71. package/src/participant/participantScrollFocus.test.ts +22 -0
  72. package/src/participant/participantScrollFocus.ts +10 -0
  73. package/src/participant/participantScrollView.test.ts +74 -0
  74. package/src/participant/participantScrollView.ts +38 -0
  75. package/src/participant/participantScrollbars.test.ts +156 -0
  76. package/src/participant/participantSubjectIcon.test.tsx +27 -0
  77. package/src/participant/participantSubjectIcon.ts +26 -0
  78. package/src/participant/useParticipantCopyFeedback.ts +33 -0
  79. package/src/participant/useParticipantThreadScroll.ts +10 -2
  80. package/src/participant/useRevealActiveChip.ts +20 -0
  81. package/src/participant/useScrollAwayState.ts +24 -0
  82. package/src/participant/useStickToBottom.ts +16 -2
  83. package/src/styles.css +137 -21
  84. package/dist/chunk-MRVFFJEH.js +0 -64
  85. package/dist/chunk-OVFCLRQQ.js +0 -84
package/dist/styles.css CHANGED
@@ -1318,6 +1318,18 @@
1318
1318
  --cv-p-i-danger: var(--cv-p-danger, #c62828);
1319
1319
  --cv-p-i-radius: var(--cv-p-radius, 0);
1320
1320
  --cv-p-i-touch: 2.75rem;
1321
+ --cv-p-i-scrollbar-thumb: var(--cv-p-scrollbar-thumb, var(--cv-p-i-border));
1322
+ --cv-p-i-scrollbar-thumb-hover: var(--cv-p-scrollbar-thumb-hover, var(--cv-p-i-accent));
1323
+ --cv-p-i-wallpaper-ink: var(--cv-p-i-border);
1324
+ --cv-p-i-wallpaper:
1325
+ radial-gradient(
1326
+ circle at 2px 2px,
1327
+ var(--cv-p-i-wallpaper-ink) 1px,
1328
+ transparent 1.5px),
1329
+ radial-gradient(
1330
+ circle at 14px 14px,
1331
+ var(--cv-p-i-wallpaper-ink) 1px,
1332
+ transparent 1.5px);
1321
1333
  display: flex;
1322
1334
  flex-direction: column;
1323
1335
  min-height: 0;
@@ -1423,6 +1435,7 @@
1423
1435
  }
1424
1436
  .cv-p-inbox {
1425
1437
  overflow-y: auto;
1438
+ touch-action: pan-y pinch-zoom;
1426
1439
  }
1427
1440
  .cv-p-inbox__title {
1428
1441
  margin: 0;
@@ -1431,6 +1444,7 @@
1431
1444
  border-bottom: 1px solid var(--cv-p-i-border);
1432
1445
  }
1433
1446
  .cv-p-filters {
1447
+ --cv-p-i-fade: 1rem;
1434
1448
  display: flex;
1435
1449
  gap: 0.5rem;
1436
1450
  padding: 0.625rem 1rem;
@@ -1615,22 +1629,95 @@
1615
1629
  display: flex;
1616
1630
  align-items: center;
1617
1631
  gap: 0.5rem;
1618
- padding: 0.5rem 1rem;
1632
+ min-height: 4rem;
1633
+ padding: 0.25rem 0.75rem;
1634
+ background: var(--cv-p-i-surface-raised);
1619
1635
  border-bottom: 1px solid var(--cv-p-i-border);
1620
1636
  }
1637
+ .cv-p-thread__back {
1638
+ flex: 0 0 auto;
1639
+ display: inline-grid;
1640
+ place-items: center;
1641
+ min-width: var(--cv-p-i-touch);
1642
+ min-height: var(--cv-p-i-touch);
1643
+ margin-inline-start: -0.5rem;
1644
+ padding: 0;
1645
+ background: transparent;
1646
+ border: 0;
1647
+ border-radius: var(--cv-p-i-radius);
1648
+ color: var(--cv-p-i-text);
1649
+ font: inherit;
1650
+ cursor: pointer;
1651
+ }
1652
+ .cv-p-thread__back svg {
1653
+ display: block;
1654
+ }
1655
+ .cv-p-thread__avatar {
1656
+ flex: 0 0 auto;
1657
+ display: grid;
1658
+ place-items: center;
1659
+ width: 2.5rem;
1660
+ height: 2.5rem;
1661
+ background: var(--cv-p-i-surface);
1662
+ border: 1px solid var(--cv-p-i-border);
1663
+ border-radius: var(--cv-p-i-radius);
1664
+ color: var(--cv-p-i-accent);
1665
+ font:
1666
+ 700 0.75rem "SFMono-Regular",
1667
+ Consolas,
1668
+ monospace;
1669
+ text-transform: uppercase;
1670
+ }
1671
+ .cv-p-thread__avatar svg {
1672
+ width: 1.25rem;
1673
+ height: 1.25rem;
1674
+ }
1621
1675
  .cv-p-thread__heading {
1622
1676
  flex: 1;
1623
1677
  min-width: 0;
1624
1678
  display: flex;
1625
1679
  flex-direction: column;
1680
+ justify-content: center;
1681
+ }
1682
+ .cv-p-thread__eyebrow {
1683
+ margin: 0;
1684
+ font:
1685
+ 0.64rem "SFMono-Regular",
1686
+ Consolas,
1687
+ monospace;
1688
+ letter-spacing: 0.08em;
1689
+ text-transform: uppercase;
1690
+ color: var(--cv-p-i-text-muted);
1626
1691
  }
1627
1692
  .cv-p-thread__title {
1628
- flex: 1;
1629
1693
  margin: 0;
1630
1694
  font-size: 1rem;
1695
+ font-weight: 600;
1696
+ line-height: 1.3;
1697
+ min-width: 0;
1698
+ overflow-wrap: anywhere;
1699
+ }
1700
+ .cv-p-thread__title-text {
1701
+ display: -webkit-box;
1702
+ -webkit-box-orient: vertical;
1703
+ -webkit-line-clamp: 1;
1704
+ line-clamp: 1;
1705
+ overflow: hidden;
1706
+ text-overflow: ellipsis;
1707
+ min-width: 0;
1708
+ }
1709
+ .cv-p-thread__meta {
1710
+ display: flex;
1711
+ flex-wrap: wrap;
1712
+ align-items: center;
1713
+ gap: 0.125rem 0.5rem;
1631
1714
  min-width: 0;
1715
+ padding-top: 0.5rem;
1632
1716
  }
1633
1717
  .cv-p-thread__title-button {
1718
+ display: flex;
1719
+ align-items: center;
1720
+ max-width: 100%;
1634
1721
  min-height: var(--cv-p-i-touch);
1635
1722
  padding: 0;
1636
1723
  background: none;
@@ -1638,8 +1725,10 @@
1638
1725
  color: inherit;
1639
1726
  font: inherit;
1640
1727
  font-weight: 600;
1641
- text-align: left;
1728
+ text-align: start;
1642
1729
  text-decoration: underline;
1730
+ text-decoration-thickness: 1px;
1731
+ text-underline-offset: 0.2em;
1643
1732
  cursor: pointer;
1644
1733
  }
1645
1734
  .cv-p-thread__subject-card {
@@ -1650,12 +1739,18 @@
1650
1739
  border-radius: var(--cv-p-i-radius);
1651
1740
  font-size: 0.82rem;
1652
1741
  }
1742
+ .cv-p-thread__scroll:focus {
1743
+ outline: none;
1744
+ }
1653
1745
  .cv-p-thread__scroll {
1654
1746
  flex: 1;
1655
1747
  min-height: 0;
1656
1748
  overflow-y: auto;
1657
1749
  overflow-anchor: none;
1658
- padding: 0.5rem 1rem 1rem;
1750
+ touch-action: pan-y pinch-zoom;
1751
+ padding: 0.5rem 0.75rem 1rem;
1752
+ background-image: var(--cv-p-wallpaper, var(--cv-p-i-wallpaper));
1753
+ background-size: var(--cv-p-wallpaper-size, 24px 24px);
1659
1754
  }
1660
1755
  .cv-p-thread__older {
1661
1756
  display: block;
@@ -1697,29 +1792,168 @@
1697
1792
  .cv-p-day {
1698
1793
  align-self: center;
1699
1794
  margin: 0.5rem 0;
1795
+ padding: 0.25rem 0.75rem;
1796
+ background: var(--cv-p-i-surface-raised);
1797
+ border: 1px solid var(--cv-p-i-border);
1798
+ border-radius: var(--cv-p-i-radius);
1700
1799
  font:
1701
1800
  0.65rem "SFMono-Regular",
1702
1801
  Consolas,
1703
1802
  monospace;
1803
+ letter-spacing: 0.06em;
1704
1804
  text-transform: uppercase;
1705
1805
  color: var(--cv-p-i-text-muted);
1706
1806
  }
1707
1807
  .cv-p-bubble {
1708
- max-width: 82%;
1808
+ max-width: 85%;
1709
1809
  align-self: flex-start;
1810
+ position: relative;
1811
+ display: flex;
1812
+ flex-wrap: wrap;
1813
+ align-items: flex-end;
1814
+ column-gap: 0.5rem;
1710
1815
  padding: 0.5rem 0.7rem;
1711
1816
  font-size: 0.88rem;
1712
1817
  background: var(--cv-p-i-surface-raised);
1713
1818
  border: 1px solid var(--cv-p-i-border);
1714
1819
  border-radius: var(--cv-p-i-radius);
1820
+ border-bottom-left-radius: 0;
1821
+ --cv-p-tail-edge: var(--cv-p-i-border);
1822
+ --cv-p-tail-fill: var(--cv-p-i-surface-raised);
1823
+ }
1824
+ .cv-p-bubble-row {
1825
+ display: flex;
1826
+ align-items: flex-start;
1827
+ gap: 0.5rem;
1828
+ align-self: flex-start;
1829
+ max-width: 92%;
1830
+ }
1831
+ .cv-p-bubble-row__avatar {
1832
+ flex: 0 0 auto;
1833
+ width: 2rem;
1834
+ }
1835
+ .cv-p-bubble-row > .cv-p-bubble {
1836
+ max-width: none;
1837
+ min-width: 0;
1838
+ }
1839
+ .cv-p-avatar {
1840
+ display: grid;
1841
+ place-items: center;
1842
+ width: 2rem;
1843
+ height: 2rem;
1844
+ overflow: hidden;
1845
+ background: var(--cv-p-i-surface-raised);
1846
+ border: 1px solid var(--cv-p-i-border);
1847
+ border-radius: var(--cv-p-i-radius);
1848
+ color: var(--cv-p-i-text);
1849
+ font:
1850
+ 700 0.7rem "SFMono-Regular",
1851
+ Consolas,
1852
+ monospace;
1853
+ letter-spacing: 0.02em;
1854
+ }
1855
+ .cv-p-avatar > img {
1856
+ display: block;
1857
+ width: 100%;
1858
+ height: 100%;
1859
+ object-fit: cover;
1715
1860
  }
1716
1861
  .cv-p-bubble--mine {
1717
1862
  align-self: flex-end;
1718
1863
  background: var(--cv-p-i-highlight);
1719
1864
  border-color: var(--cv-p-i-accent);
1865
+ --cv-p-tail-edge: var(--cv-p-i-accent);
1866
+ --cv-p-tail-fill: var(--cv-p-i-highlight);
1867
+ border-bottom-left-radius: var(--cv-p-i-radius);
1868
+ border-bottom-right-radius: 0;
1869
+ }
1870
+ .cv-p-bubble::before,
1871
+ .cv-p-bubble::after {
1872
+ content: "";
1873
+ position: absolute;
1874
+ width: 0;
1875
+ height: 0;
1876
+ border-style: solid;
1877
+ border-color: transparent;
1878
+ pointer-events: none;
1879
+ }
1880
+ .cv-p-bubble::before {
1881
+ left: -10px;
1882
+ bottom: -1px;
1883
+ border-width: 0 0 9px 9px;
1884
+ border-bottom-color: var(--cv-p-tail-edge);
1885
+ }
1886
+ .cv-p-bubble::after {
1887
+ left: -8px;
1888
+ bottom: 0;
1889
+ border-width: 0 0 8px 8px;
1890
+ border-bottom-color: var(--cv-p-tail-fill);
1891
+ }
1892
+ .cv-p-bubble--mine::before {
1893
+ left: auto;
1894
+ right: -10px;
1895
+ border-width: 0 9px 9px 0;
1896
+ border-bottom-color: var(--cv-p-tail-edge);
1897
+ }
1898
+ .cv-p-bubble--mine::after {
1899
+ left: auto;
1900
+ right: -8px;
1901
+ border-width: 0 8px 8px 0;
1902
+ border-bottom-color: var(--cv-p-tail-fill);
1903
+ }
1904
+ .cv-p-bubble-row > .cv-p-bubble:not(.cv-p-bubble--no-tail) {
1905
+ margin-left: 0.25rem;
1906
+ }
1907
+ .cv-p-bubble--no-tail {
1908
+ border-radius: var(--cv-p-i-radius);
1909
+ }
1910
+ .cv-p-bubble--no-tail::before,
1911
+ .cv-p-bubble--no-tail::after {
1912
+ content: none;
1913
+ }
1914
+ @media (forced-colors: active) {
1915
+ .cv-p-bubble::before,
1916
+ .cv-p-bubble::after {
1917
+ content: none;
1918
+ }
1919
+ .cv-p-bubble,
1920
+ .cv-p-bubble--mine {
1921
+ border-radius: var(--cv-p-i-radius);
1922
+ }
1923
+ .cv-p-thread__scroll {
1924
+ background-image: none;
1925
+ }
1926
+ .cv-p-thread__scroll,
1927
+ .cv-p-inbox,
1928
+ .cv-p-composer__input {
1929
+ scrollbar-width: auto;
1930
+ scrollbar-color: auto;
1931
+ }
1932
+ .cv-p-filters,
1933
+ .cv-p-quick {
1934
+ mask-image: none;
1935
+ -webkit-mask-image: none;
1936
+ }
1937
+ .cv-p-thread__latest-badge {
1938
+ border: 1px solid ButtonText;
1939
+ }
1940
+ }
1941
+ @media print {
1942
+ .cv-p-bubble::before,
1943
+ .cv-p-bubble::after {
1944
+ content: none;
1945
+ }
1946
+ .cv-p-bubble,
1947
+ .cv-p-bubble--mine {
1948
+ border-radius: var(--cv-p-i-radius);
1949
+ }
1950
+ .cv-p-thread__scroll {
1951
+ background-image: none;
1952
+ }
1720
1953
  }
1721
1954
  .cv-p-bubble__author {
1722
1955
  display: block;
1956
+ flex: 1 0 100%;
1723
1957
  margin-bottom: 0.15rem;
1724
1958
  font:
1725
1959
  0.65rem "SFMono-Regular",
@@ -1728,11 +1962,22 @@
1728
1962
  text-transform: uppercase;
1729
1963
  color: var(--cv-p-i-accent);
1730
1964
  }
1965
+ .cv-p-bubble > .cv-p-text {
1966
+ flex: 0 1 auto;
1967
+ min-width: 0;
1968
+ margin-inline-end: auto;
1969
+ }
1970
+ .cv-p-bubble > .cv-p-attachment,
1971
+ .cv-p-bubble > .cv-p-bubble__actions {
1972
+ flex: 1 0 100%;
1973
+ }
1731
1974
  .cv-p-bubble__meta {
1732
1975
  display: flex;
1976
+ flex: 0 0 auto;
1733
1977
  justify-content: flex-end;
1734
1978
  align-items: center;
1735
1979
  gap: 0.35rem;
1980
+ margin-inline-start: auto;
1736
1981
  margin-top: 0.25rem;
1737
1982
  font:
1738
1983
  0.65rem "SFMono-Regular",
@@ -1806,20 +2051,45 @@
1806
2051
  display: flex;
1807
2052
  flex-direction: column;
1808
2053
  gap: 0.5rem;
1809
- padding: 0.5rem 1rem 1rem;
2054
+ padding: 0.5rem 0.75rem 0.75rem;
2055
+ background: var(--cv-p-i-surface-raised);
1810
2056
  border-top: 1px solid var(--cv-p-i-border);
1811
2057
  }
1812
2058
  .cv-p-composer__row {
1813
2059
  display: flex;
1814
2060
  align-items: flex-end;
1815
- gap: 0.5rem;
2061
+ gap: 0.25rem;
2062
+ }
2063
+ .cv-p-composer__attach {
2064
+ flex: 0 0 auto;
2065
+ display: inline-grid;
2066
+ place-items: center;
2067
+ min-width: var(--cv-p-i-touch);
2068
+ min-height: var(--cv-p-i-touch);
2069
+ padding: 0;
2070
+ background: transparent;
2071
+ border: 0;
2072
+ border-radius: var(--cv-p-i-radius);
2073
+ color: var(--cv-p-i-text-muted);
2074
+ font: inherit;
2075
+ cursor: pointer;
2076
+ }
2077
+ .cv-p-composer__attach:disabled {
2078
+ opacity: 0.45;
2079
+ cursor: not-allowed;
2080
+ }
2081
+ .cv-p-composer__attach svg,
2082
+ .cv-p-composer__send svg {
2083
+ display: block;
1816
2084
  }
1817
2085
  .cv-p-composer__input {
1818
- flex: 1;
2086
+ flex: 1 1 auto;
2087
+ min-width: 0;
1819
2088
  min-height: var(--cv-p-i-touch);
1820
- max-height: 8rem;
2089
+ max-height: 6.5rem;
2090
+ overflow-y: auto;
1821
2091
  resize: none;
1822
- padding: 0.7rem;
2092
+ padding: 0.7rem 0.75rem;
1823
2093
  font: inherit;
1824
2094
  font-size: 0.9rem;
1825
2095
  color: inherit;
@@ -1827,15 +2097,23 @@
1827
2097
  border: 1px solid var(--cv-p-i-border);
1828
2098
  border-radius: var(--cv-p-i-radius);
1829
2099
  }
2100
+ .cv-p-composer__send {
2101
+ flex: 0 0 auto;
2102
+ padding: 0;
2103
+ margin-inline-start: 0.25rem;
2104
+ }
1830
2105
  .cv-p-composer__error {
1831
2106
  margin: 0;
1832
2107
  font-size: 0.8rem;
1833
2108
  color: var(--cv-p-i-danger);
1834
2109
  }
1835
2110
  .cv-p-quick {
2111
+ --cv-p-i-fade: 0.75rem;
1836
2112
  display: flex;
1837
2113
  gap: 0.5rem;
1838
2114
  overflow-x: auto;
2115
+ margin: -0.25rem calc(-1 * var(--cv-p-i-fade));
2116
+ padding-block: 0.25rem;
1839
2117
  }
1840
2118
  .cv-p-files {
1841
2119
  display: flex;
@@ -1880,22 +2158,31 @@
1880
2158
  color: var(--cv-p-i-text-muted);
1881
2159
  }
1882
2160
  .cv-p-protocol--header {
1883
- display: flex;
2161
+ display: inline-flex;
1884
2162
  align-items: center;
1885
- gap: 0.5rem;
2163
+ gap: 0.125rem;
1886
2164
  }
1887
2165
  .cv-p-protocol__copy {
1888
- min-height: var(--cv-p-i-touch);
1889
- min-width: var(--cv-p-i-touch);
1890
- padding: 0 0.75rem;
2166
+ display: inline-flex;
2167
+ align-items: center;
2168
+ justify-content: center;
2169
+ gap: 0.25rem;
2170
+ min-height: 2.25rem;
2171
+ min-width: 2.75rem;
2172
+ margin: -0.5rem -0.5rem;
2173
+ padding: 0 0.5rem;
1891
2174
  background: transparent;
1892
- border: 1px solid var(--cv-p-i-border);
2175
+ border: 0;
1893
2176
  border-radius: var(--cv-p-i-radius);
1894
- color: var(--cv-p-i-text);
2177
+ color: var(--cv-p-i-text-muted);
1895
2178
  font: inherit;
1896
- font-size: 0.75rem;
1897
2179
  cursor: pointer;
1898
2180
  }
2181
+ .cv-p-protocol__copied {
2182
+ font-size: 0.7rem;
2183
+ color: var(--cv-p-i-accent);
2184
+ white-space: nowrap;
2185
+ }
1899
2186
  .cv-p-search {
1900
2187
  padding: 0.625rem 1rem;
1901
2188
  border-bottom: 1px solid var(--cv-p-i-border);
@@ -1918,16 +2205,152 @@
1918
2205
  outline-offset: 2px;
1919
2206
  }
1920
2207
  @media (prefers-reduced-motion: no-preference) {
2208
+ .cv-p-inbox,
2209
+ .cv-p-filters,
2210
+ .cv-p-quick {
2211
+ scroll-behavior: smooth;
2212
+ }
2213
+ .cv-p-thread__latest-button {
2214
+ animation: cv-p-latest-in 0.16s ease-out;
2215
+ }
1921
2216
  .cv-p-protocol__copy,
1922
2217
  .cv-p-search__input {
1923
2218
  transition: border-color 0.12s, background-color 0.12s;
1924
2219
  }
1925
2220
  .cv-p-row,
1926
2221
  .cv-p-button,
1927
- .cv-p-chip {
2222
+ .cv-p-chip,
2223
+ .cv-p-thread__back,
2224
+ .cv-p-composer__attach {
1928
2225
  transition: background-color 0.12s, border-color 0.12s;
1929
2226
  }
1930
2227
  }
2228
+ .cv-p-thread__scroll,
2229
+ .cv-p-inbox,
2230
+ .cv-p-composer__input {
2231
+ scrollbar-width: thin;
2232
+ scrollbar-color: var(--cv-p-i-scrollbar-thumb) transparent;
2233
+ overscroll-behavior-y: contain;
2234
+ }
2235
+ @media not (forced-colors: active) {
2236
+ .cv-p-thread__scroll::-webkit-scrollbar,
2237
+ .cv-p-inbox::-webkit-scrollbar,
2238
+ .cv-p-composer__input::-webkit-scrollbar {
2239
+ width: 6px;
2240
+ height: 6px;
2241
+ }
2242
+ .cv-p-thread__scroll::-webkit-scrollbar-track,
2243
+ .cv-p-inbox::-webkit-scrollbar-track,
2244
+ .cv-p-composer__input::-webkit-scrollbar-track {
2245
+ background: transparent;
2246
+ }
2247
+ .cv-p-thread__scroll::-webkit-scrollbar-button,
2248
+ .cv-p-inbox::-webkit-scrollbar-button,
2249
+ .cv-p-composer__input::-webkit-scrollbar-button {
2250
+ display: none;
2251
+ }
2252
+ .cv-p-thread__scroll::-webkit-scrollbar-thumb,
2253
+ .cv-p-inbox::-webkit-scrollbar-thumb,
2254
+ .cv-p-composer__input::-webkit-scrollbar-thumb {
2255
+ background-color: var(--cv-p-i-scrollbar-thumb);
2256
+ border-radius: var(--cv-p-i-radius);
2257
+ }
2258
+ .cv-p-thread__scroll::-webkit-scrollbar-thumb:hover,
2259
+ .cv-p-inbox::-webkit-scrollbar-thumb:hover,
2260
+ .cv-p-composer__input::-webkit-scrollbar-thumb:hover,
2261
+ .cv-p-thread__scroll::-webkit-scrollbar-thumb:active,
2262
+ .cv-p-inbox::-webkit-scrollbar-thumb:active,
2263
+ .cv-p-composer__input::-webkit-scrollbar-thumb:active {
2264
+ background-color: var(--cv-p-i-scrollbar-thumb-hover);
2265
+ }
2266
+ }
2267
+ .cv-p-filters,
2268
+ .cv-p-quick {
2269
+ padding-inline: var(--cv-p-i-fade);
2270
+ scroll-padding-inline: var(--cv-p-i-fade);
2271
+ scrollbar-width: none;
2272
+ -ms-overflow-style: none;
2273
+ overscroll-behavior-x: contain;
2274
+ -webkit-overflow-scrolling: touch;
2275
+ scroll-snap-type: x proximity;
2276
+ mask-image:
2277
+ linear-gradient(
2278
+ to right,
2279
+ transparent,
2280
+ #000 var(--cv-p-i-fade),
2281
+ #000 calc(100% - var(--cv-p-i-fade)),
2282
+ transparent);
2283
+ -webkit-mask-image:
2284
+ linear-gradient(
2285
+ to right,
2286
+ transparent,
2287
+ #000 var(--cv-p-i-fade),
2288
+ #000 calc(100% - var(--cv-p-i-fade)),
2289
+ transparent);
2290
+ }
2291
+ .cv-p-filters::-webkit-scrollbar,
2292
+ .cv-p-quick::-webkit-scrollbar {
2293
+ display: none;
2294
+ }
2295
+ .cv-p-filters > .cv-p-chip,
2296
+ .cv-p-quick > .cv-p-chip {
2297
+ scroll-snap-align: start;
2298
+ }
2299
+ .cv-p-thread__latest {
2300
+ position: sticky;
2301
+ bottom: 0;
2302
+ height: 0;
2303
+ }
2304
+ .cv-p-thread__latest-button {
2305
+ position: absolute;
2306
+ inset-inline-end: 0.25rem;
2307
+ bottom: 0.75rem;
2308
+ display: grid;
2309
+ place-items: center;
2310
+ width: var(--cv-p-i-touch);
2311
+ height: var(--cv-p-i-touch);
2312
+ padding: 0;
2313
+ background: var(--cv-p-i-surface-raised);
2314
+ border: 1px solid var(--cv-p-i-border);
2315
+ border-radius: var(--cv-p-i-radius);
2316
+ color: var(--cv-p-i-text);
2317
+ box-shadow: 0 1px 4px rgb(0 0 0 / 35%);
2318
+ font: inherit;
2319
+ cursor: pointer;
2320
+ }
2321
+ .cv-p-thread__latest-button:hover {
2322
+ border-color: var(--cv-p-i-accent);
2323
+ }
2324
+ .cv-p-thread__latest-button svg {
2325
+ display: block;
2326
+ }
2327
+ .cv-p-thread__latest-badge {
2328
+ position: absolute;
2329
+ top: -0.5rem;
2330
+ inset-inline-end: -0.375rem;
2331
+ display: grid;
2332
+ place-items: center;
2333
+ min-width: 1.25rem;
2334
+ height: 1.25rem;
2335
+ padding: 0 0.3rem;
2336
+ background: var(--cv-p-i-accent);
2337
+ color: var(--cv-p-i-accent-contrast);
2338
+ border-radius: var(--cv-p-i-radius);
2339
+ font:
2340
+ 700 0.7rem "SFMono-Regular",
2341
+ Consolas,
2342
+ monospace;
2343
+ }
2344
+ @keyframes cv-p-latest-in {
2345
+ from {
2346
+ opacity: 0;
2347
+ transform: translateY(0.5rem);
2348
+ }
2349
+ to {
2350
+ opacity: 1;
2351
+ transform: none;
2352
+ }
2353
+ }
1931
2354
  .cv-p-filters,
1932
2355
  .cv-p-quick,
1933
2356
  .cv-p-search,
@@ -1948,3 +2371,144 @@
1948
2371
  flex: 1;
1949
2372
  min-height: 0;
1950
2373
  }
2374
+ .cv-p-text {
2375
+ font-size: 14.2px;
2376
+ line-height: 19px;
2377
+ white-space: pre-wrap;
2378
+ overflow-wrap: break-word;
2379
+ word-break: break-word;
2380
+ user-select: text;
2381
+ }
2382
+ .cv-p-text__code,
2383
+ .cv-p-text__pre {
2384
+ font-family:
2385
+ "SFMono-Regular",
2386
+ Consolas,
2387
+ monospace;
2388
+ background: color-mix(in srgb, var(--cv-p-i-border) 45%, var(--cv-p-i-surface));
2389
+ }
2390
+ .cv-p-text__code {
2391
+ padding: 0 0.25rem;
2392
+ font-size: 0.9em;
2393
+ border-radius: var(--cv-p-i-radius);
2394
+ }
2395
+ .cv-p-text__pre {
2396
+ display: block;
2397
+ margin: 0.25rem 0;
2398
+ padding: 0.5rem;
2399
+ overflow-x: auto;
2400
+ white-space: pre;
2401
+ font-size: 0.9em;
2402
+ line-height: 1.4;
2403
+ border-inline-start: 2px solid var(--cv-p-i-accent);
2404
+ border-radius: var(--cv-p-i-radius);
2405
+ scrollbar-width: thin;
2406
+ scrollbar-color: var(--cv-p-i-scrollbar-thumb) transparent;
2407
+ }
2408
+ .cv-p-text__pre > code {
2409
+ font: inherit;
2410
+ }
2411
+ .cv-p-text__quote {
2412
+ margin: 0.25rem 0;
2413
+ padding-inline-start: 0.5rem;
2414
+ border-inline-start: 3px solid var(--cv-p-i-border);
2415
+ color: var(--cv-p-i-text-muted);
2416
+ }
2417
+ .cv-p-text__list {
2418
+ margin: 0.25rem 0;
2419
+ padding-inline-start: 1.25rem;
2420
+ }
2421
+ .cv-p-text__link {
2422
+ color: var(--cv-p-i-accent);
2423
+ text-decoration: underline;
2424
+ text-underline-offset: 0.15em;
2425
+ padding-block: 0.2em;
2426
+ overflow-wrap: anywhere;
2427
+ }
2428
+ .cv-p-text__link:focus-visible,
2429
+ .cv-p-text__link-copy:focus-visible,
2430
+ .cv-p-copyable:focus-visible {
2431
+ outline: 2px solid var(--cv-p-i-accent);
2432
+ outline-offset: 2px;
2433
+ }
2434
+ .cv-p-text__link-group {
2435
+ white-space: normal;
2436
+ }
2437
+ .cv-p-text__link-copy,
2438
+ .cv-p-copyable {
2439
+ position: relative;
2440
+ display: inline;
2441
+ margin: 0;
2442
+ padding: 0;
2443
+ background: transparent;
2444
+ border: 0;
2445
+ color: inherit;
2446
+ font: inherit;
2447
+ text-align: inherit;
2448
+ cursor: pointer;
2449
+ user-select: text;
2450
+ }
2451
+ .cv-p-text__link-copy {
2452
+ margin-inline-start: 0.25rem;
2453
+ color: var(--cv-p-i-text-muted);
2454
+ vertical-align: -0.1em;
2455
+ }
2456
+ .cv-p-text__link-copy::after,
2457
+ .cv-p-copyable::after {
2458
+ content: "";
2459
+ position: absolute;
2460
+ inset-inline: 0;
2461
+ top: 50%;
2462
+ min-height: 1.5rem;
2463
+ transform: translateY(-50%);
2464
+ }
2465
+ .cv-p-text__link-copy::after {
2466
+ inset-inline: 0 auto;
2467
+ min-width: var(--cv-p-i-touch);
2468
+ }
2469
+ .cv-p-copyable {
2470
+ padding: 0 0.15rem;
2471
+ font-family:
2472
+ "SFMono-Regular",
2473
+ Consolas,
2474
+ monospace;
2475
+ font-size: 0.92em;
2476
+ background: color-mix(in srgb, var(--cv-p-i-accent) 14%, transparent);
2477
+ border-bottom: 1px dotted var(--cv-p-i-accent);
2478
+ border-radius: var(--cv-p-i-radius);
2479
+ }
2480
+ .cv-p-copyable--email {
2481
+ font-family: inherit;
2482
+ }
2483
+ .cv-p-copyable__done {
2484
+ margin-inline-start: 0.35rem;
2485
+ font-size: 0.85em;
2486
+ color: var(--cv-p-i-accent);
2487
+ }
2488
+ @media (forced-colors: active) {
2489
+ .cv-p-text__code,
2490
+ .cv-p-text__pre,
2491
+ .cv-p-copyable {
2492
+ border: 1px solid;
2493
+ background: none;
2494
+ }
2495
+ .cv-p-text__link,
2496
+ .cv-p-text__link-copy {
2497
+ color: LinkText;
2498
+ }
2499
+ }
2500
+ @media not (forced-colors: active) {
2501
+ .cv-p-text__pre::-webkit-scrollbar {
2502
+ height: 6px;
2503
+ }
2504
+ .cv-p-text__pre::-webkit-scrollbar-track {
2505
+ background: transparent;
2506
+ }
2507
+ .cv-p-text__pre::-webkit-scrollbar-thumb {
2508
+ background-color: var(--cv-p-i-scrollbar-thumb);
2509
+ border-radius: var(--cv-p-i-radius);
2510
+ }
2511
+ .cv-p-text__pre::-webkit-scrollbar-thumb:hover {
2512
+ background-color: var(--cv-p-i-scrollbar-thumb-hover);
2513
+ }
2514
+ }