@crewlethq/ui 0.86.0 → 0.87.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.
package/dist/styles.css CHANGED
@@ -19092,6 +19092,55 @@ svg.crewlet-datetime__chevron {
19092
19092
  }
19093
19093
 
19094
19094
 
19095
+ /* DeliveryReceipt-RMZW2DMT.css */
19096
+ /*
19097
+ * Who a person's message reached and who answered, under its words; and the
19098
+ * same line over a composer, before the message is sent.
19099
+ */
19100
+
19101
+ .crewlet-delivery-receipt {
19102
+ display: flex;
19103
+ flex-wrap: wrap;
19104
+ align-items: center;
19105
+ column-gap: var(--spacing-1);
19106
+ max-width: 100%;
19107
+ margin: 0;
19108
+ color: var(--color-text-tertiary);
19109
+ font-size: var(--crewlet-chat-meta);
19110
+ line-height: var(--font-line-height-snug);
19111
+ }
19112
+
19113
+ .crewlet-delivery-receipt__part {
19114
+ display: inline-flex;
19115
+ align-items: center;
19116
+ gap: var(--spacing-1);
19117
+ min-width: 0;
19118
+ }
19119
+
19120
+ .crewlet-delivery-receipt__mark {
19121
+ display: inline-flex;
19122
+ flex: none;
19123
+ }
19124
+
19125
+ .crewlet-delivery-receipt__answered {
19126
+ color: var(--color-text-secondary);
19127
+ }
19128
+
19129
+ /* The one raised tone: a message nobody was asked to answer. Its mark takes
19130
+ the warning ink, its words the secondary ink; the hint stays quiet. */
19131
+ .crewlet-delivery-receipt--none {
19132
+ color: var(--color-text-secondary);
19133
+ }
19134
+
19135
+ .crewlet-delivery-receipt--none .crewlet-delivery-receipt__mark {
19136
+ color: var(--color-feedback-warning-ink);
19137
+ }
19138
+
19139
+ .crewlet-delivery-receipt__hint {
19140
+ color: var(--color-text-tertiary);
19141
+ }
19142
+
19143
+
19095
19144
  /* DescriptionList-VF7NIBXA.css */
19096
19145
  /*
19097
19146
  * Metadata pairs on one grid.
@@ -22736,7 +22785,7 @@ a.crewlet-icon-btn {
22736
22785
  }
22737
22786
 
22738
22787
 
22739
- /* InboxList-X5Q5WWAI.css */
22788
+ /* InboxList-NVPIL3WU.css */
22740
22789
  /*
22741
22790
  * The inbox's column: groups of rows, each row a control with the task it is
22742
22791
  * about under it, and the quiet toggles at the end.
@@ -22962,19 +23011,36 @@ a.crewlet-icon-btn {
22962
23011
  }
22963
23012
 
22964
23013
  /*
22965
- * The avatar is centred on the head's line, the name it belongs to: its box
22966
- * is one line tall and the avatar, a target taller than the line, overflows
22967
- * it evenly into the control's top pad. Hung from the line's top by a pixel
22968
- * it stood 3.6px under the name's middle, its top a step further from the
22969
- * row's edge than its side.
23014
+ * THE LEADING SLOT FITS WHAT IT HOLDS. It is at least a target square (and at
23015
+ * least a line tall), with its mark centred in it, and it grows to a larger
23016
+ * mark, such as a 32px face, rather than letting it spill: a fixed one-line
23017
+ * box let a 32px face overflow it by 8px, up and to the left, until it all but
23018
+ * touched the row's edge.
23019
+ *
23020
+ * THE NAME'S LINE IS CENTRED ON A TARGET-SIZED MARK by moving the words down
23021
+ * rather than the mark up: the words start half the difference between the
23022
+ * target and a line lower, and the control's top pad is that much shorter, so
23023
+ * a row with a target-sized avatar keeps its height and its name where they
23024
+ * were, with the avatar inside the control instead of over its pad. A larger
23025
+ * mark hangs from the same top, beside the name's line and the one under it.
22970
23026
  */
23027
+ .crewlet-inbox-row__control--leading {
23028
+ --crewlet-inbox-row-lift: max(0px, (var(--size-target-min) - 1lh) / 2);
23029
+
23030
+ padding-top: calc(var(--spacing-2) + var(--spacing-1) / 2 - var(--crewlet-inbox-row-lift));
23031
+ }
23032
+
23033
+ .crewlet-inbox-row__control--leading > .crewlet-inbox-row__main {
23034
+ padding-top: var(--crewlet-inbox-row-lift);
23035
+ }
23036
+
22971
23037
  .crewlet-inbox-row__leading {
22972
23038
  display: inline-flex;
22973
23039
  flex: none;
22974
23040
  align-items: center;
22975
23041
  justify-content: center;
22976
- width: var(--size-target-min);
22977
- height: 1lh;
23042
+ min-width: var(--size-target-min);
23043
+ min-height: max(var(--size-target-min), 1lh);
22978
23044
  }
22979
23045
 
22980
23046
  .crewlet-inbox-row__main {
@@ -22984,24 +23050,49 @@ a.crewlet-icon-btn {
22984
23050
  min-width: 0;
22985
23051
  }
22986
23052
 
23053
+ /*
23054
+ * THE HEAD IS ONE RUN OF WORDS: who, then what they did, wrapping as words do
23055
+ * and stopping at two lines with an ellipsis. The name comes first, so it is
23056
+ * the last thing a long qualifier can push out of sight. As one line of boxes
23057
+ * the name was the only one allowed to shrink, so a qualifier longer than a
23058
+ * word ("replied to a thread in Product Manager") squeezed the name to
23059
+ * nothing and pushed the time past the row's edge.
23060
+ *
23061
+ * THE TIME FLOATS AT THE END OF THE FIRST LINE, so only that line gives up
23062
+ * room to it and the second runs the row's full width: "replied to a thread
23063
+ * in #engineering" keeps the room's name, the part of the line most worth
23064
+ * reading, where a column of its own took the time's width from both lines.
23065
+ * The float sits in a block of its own inside the clamp, which is where every
23066
+ * engine lays a float out and still counts the clamped lines.
23067
+ */
22987
23068
  .crewlet-inbox-row__head {
22988
- display: flex;
22989
- align-items: baseline;
22990
- gap: var(--spacing-1);
23069
+ display: -webkit-box;
23070
+ -webkit-box-orient: vertical;
23071
+ -webkit-line-clamp: 2;
23072
+ line-clamp: 2;
22991
23073
  min-width: 0;
23074
+ overflow: hidden;
23075
+ overflow-wrap: anywhere;
23076
+ color: var(--color-text-tertiary);
22992
23077
  }
22993
23078
 
22994
- .crewlet-inbox-row__title {
22995
- min-width: 0;
22996
- overflow: hidden;
22997
- text-overflow: ellipsis;
23079
+ .crewlet-inbox-row__head-text {
23080
+ display: block;
23081
+ }
23082
+
23083
+ /* The time (and any status), in the head's own line box, so the time sits on the name's baseline. */
23084
+ .crewlet-inbox-row__head-end {
23085
+ float: inline-end;
23086
+ margin-inline-start: var(--spacing-2);
22998
23087
  white-space: nowrap;
23088
+ }
23089
+
23090
+ .crewlet-inbox-row__title {
22999
23091
  font-weight: var(--font-weight-medium);
23000
23092
  color: var(--color-text-primary);
23001
23093
  }
23002
23094
 
23003
23095
  .crewlet-inbox-row__qualifier {
23004
- flex: none;
23005
23096
  font-size: var(--font-size-xs);
23006
23097
  color: var(--color-text-tertiary);
23007
23098
  }
@@ -23011,8 +23102,6 @@ a.crewlet-icon-btn {
23011
23102
  }
23012
23103
 
23013
23104
  .crewlet-inbox-row__meta {
23014
- flex: none;
23015
- margin-inline-start: auto;
23016
23105
  font-size: var(--font-size-xs);
23017
23106
  font-variant-numeric: tabular-nums;
23018
23107
  white-space: nowrap;
@@ -23060,21 +23149,12 @@ a.crewlet-icon-btn {
23060
23149
  color: var(--color-text-secondary);
23061
23150
  }
23062
23151
 
23152
+ /* At the end of the first line, before the time when the row has both. */
23063
23153
  .crewlet-inbox-row__status {
23064
23154
  display: inline-flex;
23065
- flex: none;
23066
23155
  align-items: center;
23067
23156
  }
23068
23157
 
23069
- /* With a status, the time stays at the end and the status sits beside it. */
23070
- .crewlet-inbox-row__status + .crewlet-inbox-row__meta {
23071
- margin-inline-start: 0;
23072
- }
23073
-
23074
- .crewlet-inbox-row__head > .crewlet-inbox-row__status {
23075
- margin-inline-start: auto;
23076
- }
23077
-
23078
23158
  /*
23079
23159
  * What came of the row: a glyph in the tone's ink, then words in the
23080
23160
  * secondary ink, on one line that wraps rather than cuts.
@@ -23130,7 +23210,9 @@ a.crewlet-icon-btn {
23130
23210
 
23131
23211
  /*
23132
23212
  * The task, under the words and lined up with them: the control's start pad,
23133
- * the leading slot and the gap after it.
23213
+ * a target-sized leading slot and the gap after it. The task sits outside the
23214
+ * control, so it lines up with the words for a mark of the target size, the
23215
+ * size `leading` asks for.
23134
23216
  */
23135
23217
  .crewlet-inbox-row__aside {
23136
23218
  min-width: 0;
@@ -25458,7 +25540,7 @@ a.crewlet-link-card:hover .crewlet-link-card__title {
25458
25540
  }
25459
25541
 
25460
25542
 
25461
- /* ListDetail-Q7SFVKSO.css */
25543
+ /* ListDetail-WXBCLONL.css */
25462
25544
  /*
25463
25545
  * ListDetail: a list beside the detail of what is chosen in it, each scrolling
25464
25546
  * on its own in the height it is given, one pane where it is narrow
@@ -25526,6 +25608,12 @@ a.crewlet-link-card:hover .crewlet-link-card__title {
25526
25608
  min-height: 0;
25527
25609
  }
25528
25610
 
25611
+ /* A LIST THAT GROWS SCROLLS IN ITS OWN COLUMN, whatever it holds. The pane
25612
+ left the scrolling to its content, which a DirectoryList does for its
25613
+ groups and an InboxList does not: an activity list taller than the screen
25614
+ ran past the pane's end, where the screen clipped its later rows and its
25615
+ "older" link, with nothing to scroll them into view. A list that scrolls
25616
+ itself fills the pane and never makes it overflow. */
25529
25617
  .crewlet-list-detail__list {
25530
25618
  display: flex;
25531
25619
  flex-direction: column;
@@ -25533,6 +25621,7 @@ a.crewlet-link-card:hover .crewlet-link-card__title {
25533
25621
  min-height: 0;
25534
25622
  padding-right: var(--crewlet-list-detail-gutter);
25535
25623
  border-right: 1px solid var(--color-border-default);
25624
+ overflow-y: auto;
25536
25625
  }
25537
25626
 
25538
25627
  /* A DIRECTORY RUNS TO THE HAIRLINE. A DirectoryList is navigation: its lines
@@ -25567,7 +25656,6 @@ a.crewlet-link-card:hover .crewlet-link-card__title {
25567
25656
  .crewlet-list-detail__list {
25568
25657
  padding-right: 0;
25569
25658
  border-right: 0;
25570
- overflow-y: auto;
25571
25659
  }
25572
25660
 
25573
25661
  /* The list is the pane that scrolls now, and takes the detail's end where
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewlethq/ui",
3
- "version": "0.86.0",
3
+ "version": "0.87.0",
4
4
  "description": "Crewlet shared React components built on @crewlethq/tokens and @crewlethq/icons.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -42,8 +42,8 @@
42
42
  "clean": "rm -rf dist src/generated"
43
43
  },
44
44
  "dependencies": {
45
- "@crewlethq/icons": "0.86.0",
46
- "@crewlethq/tokens": "0.86.0",
45
+ "@crewlethq/icons": "0.87.0",
46
+ "@crewlethq/tokens": "0.87.0",
47
47
  "prosemirror-commands": "1.7.2",
48
48
  "prosemirror-gapcursor": "1.4.1",
49
49
  "prosemirror-history": "1.5.1",
@@ -1,5 +1,5 @@
1
- import { richEditorLabels } from './chunk-2DMTW2Y3.js';
2
1
  import { schema, readMarkdown, writeMarkdown } from './chunk-7CSTEH5I.js';
2
+ import { richEditorLabels } from './chunk-2DMTW2Y3.js';
3
3
  import './chunk-KOJPDCGQ.js';
4
4
  import { safeHref, MARKDOWN_CALLOUT_TONES } from './chunk-KBZO4B33.js';
5
5
  import { Toolbar } from './chunk-NXFTCPF6.js';
@@ -1,5 +1,5 @@
1
- import { Stepper } from './chunk-TMML7BHT.js';
2
1
  import { PageHeader } from './chunk-FPDIHEM4.js';
2
+ import { Stepper } from './chunk-TMML7BHT.js';
3
3
  import { useMediaMatch } from './chunk-YJQXESOJ.js';
4
4
  import { Disclosure } from './chunk-NAHA62WD.js';
5
5
  import { useHeadingLevel, nextHeadingLevel, headingTag, HeadingLevelProvider } from './chunk-PQADV6P6.js';
@@ -1,8 +1,8 @@
1
1
  import { Skeleton } from './chunk-I4IUX3JF.js';
2
2
  import { PrincipalAvatar } from './chunk-HF5L56YQ.js';
3
3
  import { RelativeTime } from './chunk-EJNJMHQG.js';
4
- import { Card } from './chunk-U2IQNDDR.js';
5
4
  import { AvatarStack } from './chunk-YTLWOHOY.js';
5
+ import { Card } from './chunk-U2IQNDDR.js';
6
6
  import { ArtifactKindGround } from './chunk-J5T5TDM2.js';
7
7
  import { Checkbox } from './chunk-YQ7Q52XU.js';
8
8
  import { ArtifactAccessGlyph } from './chunk-DOY3KC6I.js';
File without changes
@@ -1,5 +1,5 @@
1
- import { SlideStage, SLIDE_WIDTH, SLIDE_HEIGHT } from './chunk-O6EV6GKI.js';
2
1
  import { SlideNav } from './chunk-5AJR6X75.js';
2
+ import { SlideStage, SLIDE_WIDTH, SLIDE_HEIGHT } from './chunk-O6EV6GKI.js';
3
3
  import { Eyebrow } from './chunk-RK4XPHVG.js';
4
4
  import { Button } from './chunk-DGXZ635L.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
- import { SidebarNav, NavItem } from './chunk-BRK3HXGZ.js';
2
1
  import { Select } from './chunk-3IWZVEXA.js';
2
+ import { SidebarNav, NavItem } from './chunk-BRK3HXGZ.js';
3
3
  import { Text } from './chunk-O5CEG7TQ.js';
4
4
  import { Card } from './chunk-U2IQNDDR.js';
5
5
  import './RailList-N2ZBPRM2.css';