@crewlethq/ui 0.86.0 → 0.86.1

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.
@@ -73,13 +73,23 @@ export type InboxRowTone = 'default' | 'danger';
73
73
  export interface InboxRowProps extends Omit<LiHTMLAttributes<HTMLLIElement>, 'onClick' | 'title'> {
74
74
  /** Who the row is from: a seat's or a person's name. */
75
75
  title: ReactNode;
76
- /** A word after the name where the row is not a plain question or update: "coding run", "stopped". */
76
+ /**
77
+ * After the name, in the quiet ink: a word where the row is not a plain
78
+ * question or update ("coding run", "stopped"), or what the person did
79
+ * ("replied to a thread in Design"). The name and the qualifier read as one
80
+ * run of words that wraps to a second line before it stops, so a long
81
+ * qualifier never hides the name.
82
+ */
77
83
  qualifier?: ReactNode;
78
84
  /** `danger` sets the qualifier in the danger ink, for a seat that has stopped. */
79
85
  qualifierTone?: InboxRowTone | undefined;
80
86
  /** At the end of the first line: when it arrived. */
81
87
  meta?: ReactNode;
82
- /** Before the words: an avatar, drawn at the target size. */
88
+ /**
89
+ * Before the words: an avatar or a mark, at the target size. Its slot is at
90
+ * least a target square and grows to fit a larger mark, such as a 32px face,
91
+ * with the name's line beside its top.
92
+ */
83
93
  leading?: ReactNode;
84
94
  /** What the row says, in up to three lines. */
85
95
  children?: ReactNode;
@@ -159,7 +169,8 @@ export interface InboxRowProps extends Omit<LiHTMLAttributes<HTMLLIElement>, 'on
159
169
  * caller names in the head (`status`): every word stays legible, and the
160
170
  * state is never carried by a decoration alone.
161
171
  *
162
- * NOTHING IS CUT AT THE EDGE. The name ellipsizes, the time never wraps, and
172
+ * NOTHING IS CUT AT THE EDGE. The name and its qualifier wrap to two lines
173
+ * before they stop, the time keeps a column of its own and never wraps, and
163
174
  * the words take up to three lines before they stop, so a row says what it is
164
175
  * rather than its first few words.
165
176
  */
@@ -1,4 +1,4 @@
1
- export { INBOX_ROW_LEAVE, InboxGroup, InboxList, InboxMore, InboxRow, InboxToggle } from '../chunk-F6ZUM66S.js';
1
+ export { INBOX_ROW_LEAVE, InboxGroup, InboxList, InboxMore, InboxRow, InboxToggle } from '../chunk-VKNZQB2G.js';
2
2
  import '../chunk-RK4XPHVG.js';
3
3
  import '../chunk-6C7GQOBV.js';
4
4
  import '../chunk-PCAT2EFB.js';
@@ -223,19 +223,36 @@
223
223
  }
224
224
 
225
225
  /*
226
- * The avatar is centred on the head's line, the name it belongs to: its box
227
- * is one line tall and the avatar, a target taller than the line, overflows
228
- * it evenly into the control's top pad. Hung from the line's top by a pixel
229
- * it stood 3.6px under the name's middle, its top a step further from the
230
- * row's edge than its side.
226
+ * THE LEADING SLOT FITS WHAT IT HOLDS. It is at least a target square (and at
227
+ * least a line tall), with its mark centred in it, and it grows to a larger
228
+ * mark, such as a 32px face, rather than letting it spill: a fixed one-line
229
+ * box let a 32px face overflow it by 8px, up and to the left, until it all but
230
+ * touched the row's edge.
231
+ *
232
+ * THE NAME'S LINE IS CENTRED ON A TARGET-SIZED MARK by moving the words down
233
+ * rather than the mark up: the words start half the difference between the
234
+ * target and a line lower, and the control's top pad is that much shorter, so
235
+ * a row with a target-sized avatar keeps its height and its name where they
236
+ * were, with the avatar inside the control instead of over its pad. A larger
237
+ * mark hangs from the same top, beside the name's line and the one under it.
231
238
  */
239
+ .crewlet-inbox-row__control--leading {
240
+ --crewlet-inbox-row-lift: max(0px, (var(--size-target-min) - 1lh) / 2);
241
+
242
+ padding-top: calc(var(--spacing-2) + var(--spacing-1) / 2 - var(--crewlet-inbox-row-lift));
243
+ }
244
+
245
+ .crewlet-inbox-row__control--leading > .crewlet-inbox-row__main {
246
+ padding-top: var(--crewlet-inbox-row-lift);
247
+ }
248
+
232
249
  .crewlet-inbox-row__leading {
233
250
  display: inline-flex;
234
251
  flex: none;
235
252
  align-items: center;
236
253
  justify-content: center;
237
- width: var(--size-target-min);
238
- height: 1lh;
254
+ min-width: var(--size-target-min);
255
+ min-height: max(var(--size-target-min), 1lh);
239
256
  }
240
257
 
241
258
  .crewlet-inbox-row__main {
@@ -245,24 +262,49 @@
245
262
  min-width: 0;
246
263
  }
247
264
 
265
+ /*
266
+ * THE HEAD IS ONE RUN OF WORDS: who, then what they did, wrapping as words do
267
+ * and stopping at two lines with an ellipsis. The name comes first, so it is
268
+ * the last thing a long qualifier can push out of sight. As one line of boxes
269
+ * the name was the only one allowed to shrink, so a qualifier longer than a
270
+ * word ("replied to a thread in Product Manager") squeezed the name to
271
+ * nothing and pushed the time past the row's edge.
272
+ *
273
+ * THE TIME FLOATS AT THE END OF THE FIRST LINE, so only that line gives up
274
+ * room to it and the second runs the row's full width: "replied to a thread
275
+ * in #engineering" keeps the room's name, the part of the line most worth
276
+ * reading, where a column of its own took the time's width from both lines.
277
+ * The float sits in a block of its own inside the clamp, which is where every
278
+ * engine lays a float out and still counts the clamped lines.
279
+ */
248
280
  .crewlet-inbox-row__head {
249
- display: flex;
250
- align-items: baseline;
251
- gap: var(--spacing-1);
281
+ display: -webkit-box;
282
+ -webkit-box-orient: vertical;
283
+ -webkit-line-clamp: 2;
284
+ line-clamp: 2;
252
285
  min-width: 0;
286
+ overflow: hidden;
287
+ overflow-wrap: anywhere;
288
+ color: var(--color-text-tertiary);
253
289
  }
254
290
 
255
- .crewlet-inbox-row__title {
256
- min-width: 0;
257
- overflow: hidden;
258
- text-overflow: ellipsis;
291
+ .crewlet-inbox-row__head-text {
292
+ display: block;
293
+ }
294
+
295
+ /* The time (and any status), in the head's own line box, so the time sits on the name's baseline. */
296
+ .crewlet-inbox-row__head-end {
297
+ float: inline-end;
298
+ margin-inline-start: var(--spacing-2);
259
299
  white-space: nowrap;
300
+ }
301
+
302
+ .crewlet-inbox-row__title {
260
303
  font-weight: var(--font-weight-medium);
261
304
  color: var(--color-text-primary);
262
305
  }
263
306
 
264
307
  .crewlet-inbox-row__qualifier {
265
- flex: none;
266
308
  font-size: var(--font-size-xs);
267
309
  color: var(--color-text-tertiary);
268
310
  }
@@ -272,8 +314,6 @@
272
314
  }
273
315
 
274
316
  .crewlet-inbox-row__meta {
275
- flex: none;
276
- margin-inline-start: auto;
277
317
  font-size: var(--font-size-xs);
278
318
  font-variant-numeric: tabular-nums;
279
319
  white-space: nowrap;
@@ -321,21 +361,12 @@
321
361
  color: var(--color-text-secondary);
322
362
  }
323
363
 
364
+ /* At the end of the first line, before the time when the row has both. */
324
365
  .crewlet-inbox-row__status {
325
366
  display: inline-flex;
326
- flex: none;
327
367
  align-items: center;
328
368
  }
329
369
 
330
- /* With a status, the time stays at the end and the status sits beside it. */
331
- .crewlet-inbox-row__status + .crewlet-inbox-row__meta {
332
- margin-inline-start: 0;
333
- }
334
-
335
- .crewlet-inbox-row__head > .crewlet-inbox-row__status {
336
- margin-inline-start: auto;
337
- }
338
-
339
370
  /*
340
371
  * What came of the row: a glyph in the tone's ink, then words in the
341
372
  * secondary ink, on one line that wraps rather than cuts.
@@ -391,7 +422,9 @@
391
422
 
392
423
  /*
393
424
  * The task, under the words and lined up with them: the control's start pad,
394
- * the leading slot and the gap after it.
425
+ * a target-sized leading slot and the gap after it. The task sits outside the
426
+ * control, so it lines up with the words for a mark of the target size, the
427
+ * size `leading` asks for.
395
428
  */
396
429
  .crewlet-inbox-row__aside {
397
430
  min-width: 0;
@@ -1,2 +1,2 @@
1
- export { ListDetail } from '../chunk-SNJM5KPV.js';
1
+ export { ListDetail } from '../chunk-P33VNG7Q.js';
2
2
  import '../chunk-ODEQTPFM.js';
@@ -65,6 +65,12 @@
65
65
  min-height: 0;
66
66
  }
67
67
 
68
+ /* A LIST THAT GROWS SCROLLS IN ITS OWN COLUMN, whatever it holds. The pane
69
+ left the scrolling to its content, which a DirectoryList does for its
70
+ groups and an InboxList does not: an activity list taller than the screen
71
+ ran past the pane's end, where the screen clipped its later rows and its
72
+ "older" link, with nothing to scroll them into view. A list that scrolls
73
+ itself fills the pane and never makes it overflow. */
68
74
  .crewlet-list-detail__list {
69
75
  display: flex;
70
76
  flex-direction: column;
@@ -72,6 +78,7 @@
72
78
  min-height: 0;
73
79
  padding-right: var(--crewlet-list-detail-gutter);
74
80
  border-right: 1px solid var(--color-border-default);
81
+ overflow-y: auto;
75
82
  }
76
83
 
77
84
  /* A DIRECTORY RUNS TO THE HAIRLINE. A DirectoryList is navigation: its lines
@@ -106,7 +113,6 @@
106
113
  .crewlet-list-detail__list {
107
114
  padding-right: 0;
108
115
  border-right: 0;
109
- overflow-y: auto;
110
116
  }
111
117
 
112
118
  /* The list is the pane that scrolls now, and takes the detail's end where
@@ -1,6 +1,6 @@
1
- export { PresenterView, formatStopwatch } from '../chunk-WCJTOKTY.js';
2
- import '../chunk-O6EV6GKI.js';
1
+ export { PresenterView, formatStopwatch } from '../chunk-LMEMH6DO.js';
3
2
  import '../chunk-5AJR6X75.js';
3
+ import '../chunk-O6EV6GKI.js';
4
4
  import '../chunk-RK4XPHVG.js';
5
5
  import '../chunk-DGXZ635L.js';
6
6
  import '../chunk-XSPCITPN.js';
@@ -1,4 +1,4 @@
1
- export { RichEditor, preloadRichEditor } from '../chunk-3AMWXJQX.js';
1
+ export { RichEditor, preloadRichEditor } from '../chunk-AUSFKGKL.js';
2
2
  export { RICH_EDITOR_LABELS, richEditorLabels } from '../chunk-2DMTW2Y3.js';
3
3
  import '../chunk-KOJPDCGQ.js';
4
4
  import '../chunk-KBZO4B33.js';
@@ -9,7 +9,7 @@ import { jsx } from 'react/jsx-runtime';
9
9
  var engine = null;
10
10
  var loading = null;
11
11
  function loadEngine() {
12
- loading ??= import('./Editor-VGNB35NJ.js').then(
12
+ loading ??= import('./Editor-5D5Z3LBQ.js').then(
13
13
  (module) => {
14
14
  engine = module.Editor;
15
15
  return engine;
@@ -1,5 +1,5 @@
1
1
  import { cx } from './chunk-ODEQTPFM.js';
2
- import './ListDetail-Q7SFVKSO.css';
2
+ import './ListDetail-WXBCLONL.css';
3
3
  import { jsx, jsxs } from 'react/jsx-runtime';
4
4
 
5
5
  function ListDetail({ list, children, showing = "list", className, ...rest }) {
@@ -4,7 +4,7 @@ import { usePresence, releaseFocus } from './chunk-PCAT2EFB.js';
4
4
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
5
5
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
- import './InboxList-X5Q5WWAI.css';
7
+ import './InboxList-NVPIL3WU.css';
8
8
  import { useId, useState, useRef, useLayoutEffect, useEffect, useCallback, cloneElement, Children, isValidElement } from 'react';
9
9
  import { ChevronDownGlyph } from '@crewlethq/icons/glyphs';
10
10
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -222,60 +222,81 @@ function InboxRow({
222
222
  told.current = true;
223
223
  onLeft?.();
224
224
  }, [gone, onLeft]);
225
+ const ids = useId();
226
+ const part = (name) => `${ids}-${name}`;
227
+ const hasQualifier = qualifier !== void 0;
228
+ const hasStatus = status !== void 0 && status !== null;
229
+ const hasMeta = meta !== void 0;
230
+ const hasOutcome = outcome !== void 0 && outcome !== null;
231
+ const labelledBy = [
232
+ leading === void 0 ? null : part("leading"),
233
+ part("title"),
234
+ hasQualifier ? part("qualifier") : null,
235
+ hasStatus || hasMeta ? part("end") : null,
236
+ part("text"),
237
+ hasOutcome ? part("outcome") : null,
238
+ unread ? part("unread") : null,
239
+ done ? part("done") : null
240
+ ].filter(Boolean).join(" ");
225
241
  const contents = /* @__PURE__ */ jsxs(Fragment, { children: [
226
242
  leading === void 0 ? null : /* @__PURE__ */ jsxs(Fragment, { children: [
227
- /* @__PURE__ */ jsx("span", { className: "crewlet-inbox-row__leading", children: leading }),
243
+ /* @__PURE__ */ jsx("span", { id: part("leading"), className: "crewlet-inbox-row__leading", children: leading }),
228
244
  " "
229
245
  ] }),
230
246
  /* @__PURE__ */ jsxs("span", { className: "crewlet-inbox-row__main", children: [
231
- /* @__PURE__ */ jsxs("span", { className: "crewlet-inbox-row__head", children: [
232
- /* @__PURE__ */ jsx("span", { className: "crewlet-inbox-row__title", children: title }),
233
- qualifier === void 0 ? null : /* @__PURE__ */ jsxs(Fragment, { children: [
247
+ /* @__PURE__ */ jsx("span", { className: "crewlet-inbox-row__head", children: /* @__PURE__ */ jsxs("span", { className: "crewlet-inbox-row__head-text", children: [
248
+ hasStatus || hasMeta ? /* @__PURE__ */ jsxs("span", { id: part("end"), className: "crewlet-inbox-row__head-end", children: [
249
+ hasStatus ? /* @__PURE__ */ jsx("span", { className: "crewlet-inbox-row__status", children: status }) : null,
250
+ hasStatus && hasMeta ? " " : null,
251
+ hasMeta ? /* @__PURE__ */ jsx("span", { className: "crewlet-inbox-row__meta", children: meta }) : null
252
+ ] }) : null,
253
+ /* @__PURE__ */ jsx("span", { id: part("title"), className: "crewlet-inbox-row__title", children: title }),
254
+ hasQualifier ? /* @__PURE__ */ jsxs(Fragment, { children: [
234
255
  " ",
235
- /* @__PURE__ */ jsx("span", { className: cx("crewlet-inbox-row__qualifier", qualifierTone === "danger" && "crewlet-inbox-row__qualifier--danger"), children: qualifier })
236
- ] }),
237
- status === void 0 || status === null ? null : /* @__PURE__ */ jsxs(Fragment, { children: [
238
- " ",
239
- /* @__PURE__ */ jsx("span", { className: "crewlet-inbox-row__status", children: status })
240
- ] }),
241
- meta === void 0 ? null : /* @__PURE__ */ jsxs(Fragment, { children: [
242
- " ",
243
- /* @__PURE__ */ jsx("span", { className: "crewlet-inbox-row__meta", children: meta })
244
- ] })
245
- ] }),
256
+ /* @__PURE__ */ jsx(
257
+ "span",
258
+ {
259
+ id: part("qualifier"),
260
+ className: cx("crewlet-inbox-row__qualifier", qualifierTone === "danger" && "crewlet-inbox-row__qualifier--danger"),
261
+ children: qualifier
262
+ }
263
+ )
264
+ ] }) : null
265
+ ] }) }),
246
266
  " ",
247
- /* @__PURE__ */ jsxs("span", { className: "crewlet-inbox-row__text", children: [
267
+ /* @__PURE__ */ jsxs("span", { id: part("text"), className: "crewlet-inbox-row__text", children: [
248
268
  children,
249
269
  excerpt === void 0 ? null : /* @__PURE__ */ jsxs(Fragment, { children: [
250
270
  " ",
251
271
  /* @__PURE__ */ jsx("span", { className: "crewlet-inbox-row__excerpt", children: excerpt })
252
272
  ] })
253
273
  ] }),
254
- outcome === void 0 || outcome === null ? null : /* @__PURE__ */ jsxs(Fragment, { children: [
274
+ hasOutcome ? /* @__PURE__ */ jsxs(Fragment, { children: [
255
275
  " ",
256
- /* @__PURE__ */ jsxs("span", { className: cx("crewlet-inbox-row__outcome", `crewlet-inbox-row__outcome--${outcomeTone}`), children: [
276
+ /* @__PURE__ */ jsxs("span", { id: part("outcome"), className: cx("crewlet-inbox-row__outcome", `crewlet-inbox-row__outcome--${outcomeTone}`), children: [
257
277
  outcomeIcon === void 0 ? null : /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "crewlet-inbox-row__outcome-icon", children: outcomeIcon }),
258
278
  /* @__PURE__ */ jsx("span", { className: "crewlet-inbox-row__outcome-text", children: outcome })
259
279
  ] })
260
- ] }),
280
+ ] }) : null,
261
281
  unread ? /* @__PURE__ */ jsxs(Fragment, { children: [
262
282
  " ",
263
- /* @__PURE__ */ jsx(VisuallyHidden, { children: unreadLabel })
283
+ /* @__PURE__ */ jsx(VisuallyHidden, { id: part("unread"), children: unreadLabel })
264
284
  ] }) : null,
265
285
  done ? /* @__PURE__ */ jsxs(Fragment, { children: [
266
286
  " ",
267
- /* @__PURE__ */ jsx(VisuallyHidden, { children: doneLabel })
287
+ /* @__PURE__ */ jsx(VisuallyHidden, { id: part("done"), children: doneLabel })
268
288
  ] }) : null
269
289
  ] })
270
290
  ] });
271
291
  const controlClass = cx(
272
292
  "crewlet-inbox-row__control",
293
+ leading !== void 0 && "crewlet-inbox-row__control--leading",
273
294
  unread && "crewlet-inbox-row__control--unread",
274
295
  actionable && "crewlet-inbox-row__control--actionable",
275
296
  done && "crewlet-inbox-row__control--done"
276
297
  );
277
298
  const current = selected ? "true" : void 0;
278
- const control = href !== void 0 ? /* @__PURE__ */ jsx("a", { className: controlClass, href, "aria-current": current, onClick, children: contents }) : /* @__PURE__ */ jsx("button", { type: "button", className: controlClass, "aria-current": current, onClick, children: contents });
299
+ const control = href !== void 0 ? /* @__PURE__ */ jsx("a", { className: controlClass, href, "aria-current": current, "aria-labelledby": labelledBy, onClick, children: contents }) : /* @__PURE__ */ jsx("button", { type: "button", className: controlClass, "aria-current": current, "aria-labelledby": labelledBy, onClick, children: contents });
279
300
  if (gone) return null;
280
301
  return /* @__PURE__ */ jsx(
281
302
  "li",
@@ -1,34 +1,32 @@
1
1
  import '../chunk-PAGITACP.js';
2
- export { WidgetFrame } from '../chunk-5K5SZGBI.js';
3
2
  export { ElementToPngError, elementToPng, parseCsv, serializeElement, toCsv } from '../chunk-KBSD476L.js';
4
3
  export { TreeCanvas } from '../chunk-FPU7AA3X.js';
5
4
  export { TypeSpecimen } from '../chunk-JKAFEFFC.js';
6
- export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from '../chunk-RBQRTGXX.js';
7
5
  export { REFERENCE_NAME_PATTERN, ValueField, completeReference, isWholeReference, rankReferences, referenceAt, urlSchemeOf } from '../chunk-G3CACE5L.js';
6
+ export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from '../chunk-RBQRTGXX.js';
8
7
  export { VersionTimeline } from '../chunk-L5VU3LZT.js';
8
+ export { WidgetFrame } from '../chunk-5K5SZGBI.js';
9
9
  export { THREAD_SUMMARY_LABELS, ThreadSummary } from '../chunk-QPYGJ7R7.js';
10
- export { TileGrid } from '../chunk-UFID3DSP.js';
11
10
  export { TIME_RANGE_CUSTOM, TIME_RANGE_PICKER_LABELS, TimeRangePicker, timeRangeFieldKey, timeRangeProblem } from '../chunk-ZJVLGYE3.js';
12
11
  export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-T3S3D4FC.js';
13
12
  export { ToastProvider, Toaster, readingDuration, toasterInsetStyle, useToast } from '../chunk-JIBWNHTC.js';
14
13
  export { TagsInput } from '../chunk-77VOASOY.js';
15
14
  export { ThemeGallery } from '../chunk-NXBCAXP5.js';
16
- export { ThemeSwatch } from '../chunk-3XQUEF5C.js';
17
15
  export { DensitySwitcher, ThemeSwitcher } from '../chunk-5V6GW6HK.js';
16
+ export { ThemeSwatch } from '../chunk-3XQUEF5C.js';
18
17
  export { ThemeToggle } from '../chunk-IPMJGK2Q.js';
19
18
  export { applyStoredPreferences, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from '../chunk-Z24ZUSTX.js';
19
+ export { TileGrid } from '../chunk-UFID3DSP.js';
20
20
  export { Switcher } from '../chunk-7M7WKYOV.js';
21
21
  export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell, TableTwoLineCell } from '../chunk-3CALM534.js';
22
22
  export { SOURCE_EDITOR_KEYS, SourceEditor, lineStart } from '../chunk-PW57R4BN.js';
23
23
  export { StatGroup } from '../chunk-OUD75UB2.js';
24
- export { Statement } from '../chunk-MZJKPTA5.js';
25
24
  export { StatCard } from '../chunk-G5IZGAWS.js';
26
- export { matchesShortcut, useShortcut } from '../chunk-LZNPL266.js';
25
+ export { Statement } from '../chunk-MZJKPTA5.js';
27
26
  import '../chunk-5AHNW5CP.js';
28
27
  export { SLIDE_COMPARE_LABELS, SlideCompare } from '../chunk-XJMES7AE.js';
29
- export { SlideFilmstrip } from '../chunk-RO5JU6SN.js';
30
28
  export { SlideGrid } from '../chunk-6M2N6ETA.js';
31
- export { SelectionBar } from '../chunk-XA2QKGBJ.js';
29
+ export { SlideFilmstrip } from '../chunk-RO5JU6SN.js';
32
30
  export { SEND_BUTTON_LABELS, SendButton } from '../chunk-T2GC7UAP.js';
33
31
  export { SettingsTable, SettingsTableRow } from '../chunk-WL4TC4YZ.js';
34
32
  export { SetupWizard } from '../chunk-WRZPO4YL.js';
@@ -36,20 +34,22 @@ export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../ch
36
34
  export { SHEET_COLUMN_EDITOR_LABELS, SheetColumnEditor, SheetColumnTypeGlyph } from '../chunk-SGMWLUYQ.js';
37
35
  export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-46FIBJCV.js';
38
36
  export { TagGroup } from '../chunk-UEOEBOBR.js';
39
- export { RUN_STATES, RunChip } from '../chunk-AQ7ZV3CH.js';
37
+ export { matchesShortcut, useShortcut } from '../chunk-LZNPL266.js';
40
38
  export { FRAME_HELLO_TIMEOUT_MS, FRAME_LOAD_GRACE_MS, SandboxedFrame, SandboxedFrameNotice, SandboxedFramePlaceholder } from '../chunk-V6WDJUYK.js';
41
39
  export { SearchTrigger } from '../chunk-ERNT3UTB.js';
42
40
  export { SectionFrame, SectionFrameBody, SectionFrameNav } from '../chunk-7BDBO2NP.js';
43
41
  export { SegmentedMeter, segmentedMeterLabel } from '../chunk-4AK52VHB.js';
42
+ export { SelectionBar } from '../chunk-XA2QKGBJ.js';
44
43
  export { REFUSAL_CARD_LABELS, RefusalCard } from '../chunk-7ELFH3RJ.js';
45
44
  export { RelatedRow } from '../chunk-CL3FWLDO.js';
46
45
  export { RESULT_TABLE_CARD_LABELS, RESULT_TABLE_COLLAPSED_ROWS, RESULT_TABLE_MAX_ROWS, ResultTableCard } from '../chunk-2L4WHYMT.js';
47
46
  export { Table } from '../chunk-75NQV4R4.js';
48
47
  export { ReviewList } from '../chunk-NFXCJGHG.js';
49
- export { RichEditor, preloadRichEditor } from '../chunk-3AMWXJQX.js';
50
- export { RICH_EDITOR_LABELS, richEditorLabels } from '../chunk-2DMTW2Y3.js';
51
48
  export { canonicalMarkdown, roundTripMarkdown } from '../chunk-GBASM5EV.js';
52
49
  import '../chunk-7CSTEH5I.js';
50
+ export { RichEditor, preloadRichEditor } from '../chunk-AUSFKGKL.js';
51
+ export { RICH_EDITOR_LABELS, richEditorLabels } from '../chunk-2DMTW2Y3.js';
52
+ export { RUN_STATES, RunChip } from '../chunk-AQ7ZV3CH.js';
53
53
  export { PROPOSAL_CARD_LABELS, PROPOSAL_FAILURE_OUTCOMES, PROPOSAL_STATES, PROPOSAL_TONES, ProposalCard } from '../chunk-M33DABTW.js';
54
54
  export { Prose } from '../chunk-DVVP27OD.js';
55
55
  export { QR_DARK, QR_LIGHT, QR_QUIET_ZONE, QrCode, qrModulePath, qrModules } from '../chunk-Y56FM3K4.js';
@@ -60,13 +60,13 @@ export { Text } from '../chunk-O5CEG7TQ.js';
60
60
  export { AddReaction, REACTION_BAR_LABELS, ReactionBar, reactionWho } from '../chunk-4DEKONVJ.js';
61
61
  export { READING_PANE_ENTER, ReadingPane, ReadingPaneByline, ReadingPaneLead, ReadingPaneOutcome, ReadingPaneQuote, ReadingPaneReasoning, ReadingPaneSection, ReadingPaneTitle } from '../chunk-64JNKLLP.js';
62
62
  export { RecordChip, RecordChipList } from '../chunk-ZPTKAYJK.js';
63
- export { PresenceStack } from '../chunk-F7HZYTZT.js';
64
- export { PresenterView, formatStopwatch } from '../chunk-WCJTOKTY.js';
65
- export { SLIDE_HEIGHT, SLIDE_WIDTH, SlideStage, useSlideKeys } from '../chunk-O6EV6GKI.js';
63
+ export { PresenterView, formatStopwatch } from '../chunk-LMEMH6DO.js';
66
64
  export { SLIDE_NAV_LABELS, SlideNav } from '../chunk-5AJR6X75.js';
65
+ export { SLIDE_HEIGHT, SLIDE_WIDTH, SlideStage, useSlideKeys } from '../chunk-O6EV6GKI.js';
66
+ export { PresenceStack } from '../chunk-F7HZYTZT.js';
67
67
  export { PricingCard } from '../chunk-X3US25XJ.js';
68
- export { PrincipalPicker } from '../chunk-Q6TCUSQA.js';
69
68
  export { PropertyList } from '../chunk-OPVTNHPH.js';
69
+ export { PrincipalPicker } from '../chunk-Q6TCUSQA.js';
70
70
  export { PageNote } from '../chunk-CV4NES3P.js';
71
71
  export { PEEK_RAIL_LABELS, PEEK_RAIL_MAX_WIDTH, PEEK_RAIL_MIN_WIDTH, PEEK_RAIL_WIDTH, PeekHost, PeekNeighbours, PeekRail, isPlainPress, peekClickHandler, peekRowActivation, usePeekNeighbours, usePeekOrder, usePeekStep } from '../chunk-CDNZTCP2.js';
72
72
  export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from '../chunk-QGEDXYLB.js';
@@ -81,9 +81,9 @@ export { TreeGrid } from '../chunk-ZDWAIVWL.js';
81
81
  export { SIZE_EPSILON, TYPE_AHEAD_RESET_MS, createTreeModel, isTypeAheadKey, layoutConnectors, layoutForest, placeGroups, treeAllExpandable, treeAncestors, treeCollapseOrAscend, treeExpandOrDescend, treeExpandTo, treeExpandable, treeFirst, treeFirstChild, treeItemAction, treeLast, treeLevel, treeNext, treeParent, treePosInSet, treePrevious, treeSetSize, treeStep, treeTypeAhead, treeVisible, typeAheadBuffer, useLayoutAnchor, useMeasuredSizes, useTreeState } from '../chunk-MY374UUD.js';
82
82
  export { OrgLabel } from '../chunk-5YXMKZUA.js';
83
83
  export { Outline, scrollToHeading, useActiveHeading } from '../chunk-7QCSISHM.js';
84
- export { MentionChip } from '../chunk-PX5BOALQ.js';
85
84
  export { MENTION_MENU_LABELS, MentionMenu, mentionQuery } from '../chunk-3BRXEMYT.js';
86
85
  export { PersonRow } from '../chunk-EALRMP7N.js';
86
+ export { MentionChip } from '../chunk-PX5BOALQ.js';
87
87
  export { MERGE_CONFLICTS_LABELS, MergeConflicts } from '../chunk-C42XW5YP.js';
88
88
  export { ActionDivider, MessageAction, MessageActions, QuickReaction } from '../chunk-LT44RL62.js';
89
89
  import '../chunk-TDFLCUBE.js';
@@ -99,7 +99,7 @@ export { LinkCard } from '../chunk-O3MYBNRO.js';
99
99
  import '../chunk-KOJPDCGQ.js';
100
100
  export { LinkInterstitial, openExternal } from '../chunk-MYAARF4Z.js';
101
101
  export { List, ListItem } from '../chunk-PS5ZYIA6.js';
102
- export { ListDetail } from '../chunk-SNJM5KPV.js';
102
+ export { ListDetail } from '../chunk-P33VNG7Q.js';
103
103
  export { ListInput, withDraft } from '../chunk-GLKQHN7G.js';
104
104
  export { INLINE_EDITOR_LABELS, InlineEditor } from '../chunk-O7KG4CXB.js';
105
105
  export { InlineRef } from '../chunk-JGDCVLD4.js';
@@ -110,7 +110,7 @@ import '../chunk-MICRGE3J.js';
110
110
  import '../chunk-FFMCMSJB.js';
111
111
  export { IconTile } from '../chunk-3LI4TRUR.js';
112
112
  export { ImageUpload } from '../chunk-K6Y6CDEZ.js';
113
- export { INBOX_ROW_LEAVE, InboxGroup, InboxList, InboxMore, InboxRow, InboxToggle } from '../chunk-F6ZUM66S.js';
113
+ export { INBOX_ROW_LEAVE, InboxGroup, InboxList, InboxMore, InboxRow, InboxToggle } from '../chunk-VKNZQB2G.js';
114
114
  export { IndicatorAnchor } from '../chunk-27MJPU7G.js';
115
115
  export { FILTER_CHIP_ATTRIBUTE, FilterChip, FilterChipGroup } from '../chunk-IWZG7NPV.js';
116
116
  export { FindingList } from '../chunk-LSRQ2A6B.js';
@@ -128,12 +128,12 @@ export { FactList } from '../chunk-SNQ7PH3D.js';
128
128
  export { FileDrop, FilePickButton, droppedFiles, pickedFiles } from '../chunk-KQWJWTED.js';
129
129
  export { FileList } from '../chunk-5WRWBDML.js';
130
130
  export { Divider } from '../chunk-6KWNXIDE.js';
131
- export { DockColumn } from '../chunk-5JPOFAVN.js';
132
131
  export { DOC_TABS_EDITOR_LABELS, DocTabsEditor } from '../chunk-RDIQB5ZE.js';
132
+ export { DockColumn } from '../chunk-5JPOFAVN.js';
133
133
  export { DownloadButton } from '../chunk-EHFQMY3B.js';
134
134
  export { downloadBlob, downloadText, safeFilename, useDownload } from '../chunk-YNRKVY7X.js';
135
- export { EMOJI_GROUPS, EMOJI_PICKER_COLUMNS, EMOJI_PICKER_LABELS, EmojiPicker, emojiName, searchEmoji } from '../chunk-SPNTUQBV.js';
136
135
  export { EditingStatus } from '../chunk-O55JQ7BE.js';
136
+ export { EMOJI_GROUPS, EMOJI_PICKER_COLUMNS, EMOJI_PICKER_LABELS, EmojiPicker, emojiName, searchEmoji } from '../chunk-SPNTUQBV.js';
137
137
  export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from '../chunk-3H6OZUZ3.js';
138
138
  export { DEEP_WORK_CARD_LABELS, DEEP_WORK_STATES, DEEP_WORK_STATE_LABELS, DeepWorkCard } from '../chunk-35CKF77R.js';
139
139
  export { STEP_STATES, STEP_STATE_LABELS, StepList, StepStateMark, Stepper, stepDetailPieces } from '../chunk-TMML7BHT.js';
@@ -142,8 +142,8 @@ export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTo
142
142
  export { DescriptionList, DescriptionListItem } from '../chunk-LH4OF7FI.js';
143
143
  export { DIFF_SUMMARY_LABELS, DIFF_VIEW_LABELS, DiffSummary, DiffView, MAX_DIFF_LINES, collapseDiff, diffLines, diffStat, firstChangedLines, splitLines } from '../chunk-AOFVXE6V.js';
144
144
  export { DirectoryList } from '../chunk-RKIJAXQA.js';
145
+ export { Container } from '../chunk-HJO4WCH6.js';
145
146
  export { ContrastHelp } from '../chunk-TBQFZV4H.js';
146
- export { ContrastBadge, ContrastLevelTag, contrastLevel, contrastRatio, formatContrastRatio } from '../chunk-WMSXPF7T.js';
147
147
  export { CursorFlag } from '../chunk-MMCYH5LB.js';
148
148
  export { PresenceRing, presenceHueClass } from '../chunk-EFX2YC5T.js';
149
149
  export { ChooserList, ColumnChooser, DATA_GRID_ICON_TRACK, DataGrid, columnChoicesOf, countDataGridRows, fitGridColumns, nextGridSort, parseGridSort, useAnyDataGridDriving, useDataGridDriving } from '../chunk-L2QRKIL4.js';
@@ -161,12 +161,12 @@ export { CompactNav, CompactNavGroup, CompactNavItem, CompactNavSeparator, group
161
161
  export { LockedLabel } from '../chunk-TEV5REGB.js';
162
162
  export { ConfirmField, confirmMatches } from '../chunk-PEBQMX5X.js';
163
163
  export { InlineCode } from '../chunk-PLL7ZJHY.js';
164
- export { Container } from '../chunk-HJO4WCH6.js';
165
164
  export { CONFLICT_NOTE_LABELS, ConflictNote } from '../chunk-B3PK2LND.js';
165
+ export { ContrastBadge, ContrastLevelTag, contrastLevel, contrastRatio, formatContrastRatio } from '../chunk-WMSXPF7T.js';
166
166
  export { CHIP_FIELD_LABELS, ChipField } from '../chunk-TRXTO3WC.js';
167
167
  export { ChoiceButtons } from '../chunk-RVSNBUIU.js';
168
- export { ChoiceList } from '../chunk-XU7RQNT6.js';
169
168
  export { ChoiceCards } from '../chunk-JDMJVVVQ.js';
169
+ export { ChoiceList } from '../chunk-XU7RQNT6.js';
170
170
  export { CodeBlock } from '../chunk-4ME4J3YY.js';
171
171
  export { ColorChip } from '../chunk-C6T4VBEY.js';
172
172
  export { ColorField } from '../chunk-OOOVL77Y.js';
@@ -174,13 +174,13 @@ export { ColorSwatch } from '../chunk-6EZX26BD.js';
174
174
  export { CopyButton, Copyable } from '../chunk-ETNQYT5O.js';
175
175
  export { useClipboard, writeClipboard } from '../chunk-STJ7QBC3.js';
176
176
  export { useOutcome } from '../chunk-DTIW4CHZ.js';
177
- import '../chunk-3L5NHASN.js';
178
- export { ActivityStrip, BarList, ChartEmpty, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Histogram, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, histogramTicks, niceScale, useChartHover } from '../chunk-YWVT7B6N.js';
179
177
  export { ChatDay, ChatDayPill } from '../chunk-ONHYFU7D.js';
178
+ export { ActivityStrip, BarList, ChartEmpty, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Histogram, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, histogramTicks, niceScale, useChartHover } from '../chunk-YWVT7B6N.js';
179
+ import '../chunk-3L5NHASN.js';
180
180
  export { ChatDivider } from '../chunk-K774LUN3.js';
181
181
  export { CHAT_MESSAGE_CLASS, CHAT_MESSAGE_FAILURE_LABELS, ChatMessage, ChatMessageFailure } from '../chunk-IUBOLGHG.js';
182
- export { CHAT_THREAD_FOLLOW_WITHIN, CHAT_THREAD_LABELS, ChatThread } from '../chunk-VONEKR3J.js';
183
182
  export { CheckGrid } from '../chunk-NN475NAP.js';
183
+ export { CHAT_THREAD_FOLLOW_WITHIN, CHAT_THREAD_LABELS, ChatThread } from '../chunk-VONEKR3J.js';
184
184
  export { BOARD_NAME_MIN_CHARS, CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, CanvasBoard, TITLE_GLYPH_EM, boardName, boardRoom, liveBoards, titleSize } from '../chunk-2SVQBQAD.js';
185
185
  export { Note } from '../chunk-5SZGKSGL.js';
186
186
  export { CanvasSchematic } from '../chunk-NBWNLYWZ.js';
@@ -193,15 +193,15 @@ export { ChangeMark } from '../chunk-VB3FVKNI.js';
193
193
  export { LONGTEXT_MAX_DEFAULT, RATING_MAX_CEILING, RATING_MAX_DEFAULT, SHEET_COLUMN_BOUNDS, SHEET_COLUMN_TYPES, SHEET_COLUMN_WIDTHS, SHEET_FIT_SAMPLES, SHEET_LABELS, SHEET_ROW_HEIGHT, SHEET_ROW_NUMBER_WIDTH, SheetPendingEdits, TEXT_MAX_DEFAULT, URL_MAX, cellDescription, cellKey, cellSpeech, changeText, changeTime, checkValue, columnOffsets, columnWidth, compareValues, displayText, drawnColumns, editText, editorSide, findOption, findPerson, fitSamples, fittedWidth, flagText, hasPrevious, inRange, isEmptyValue, isMod, isMultiCell, isSheetColumnType, isTypingKey, liveOptions, moveFrom, nextSort, normalizeValue, optionHue, parseOptionList, parseTSV, parseText, planClear, planPaste, presenceByCell, presenceByColumn, presenceByRow, rangeOf, ratingMax, refusalText, retypeColumn, rowName, sameValue, scrollToRow, sheetLabels, sortRows, spokenText, statusTone, textMax, toTSV, visibleRows } from '../chunk-LFSIKGRQ.js';
194
194
  export { PRESENCE_ACTIVITIES, PRESENCE_HUES, PRESENCE_LABELS, assignPresenceHues, collapseSessions, joinNames, presenceLabels, presenceOrder } from '../chunk-Z7JYG5TF.js';
195
195
  export { BrandSample } from '../chunk-AVMQMY66.js';
196
- export { BrandScope, brandScopeInputs } from '../chunk-X7WEE3EK.js';
197
- import '../chunk-5SGHW42B.js';
198
- import '../chunk-7W3LYIOC.js';
199
- export { Breadcrumb } from '../chunk-M52HLPOG.js';
200
- export { KeyChip } from '../chunk-HBDA76EZ.js';
201
196
  export { BRIEF_CARD_LABELS, BRIEF_CARD_MAX_FOLLOW_UPS, BRIEF_CARD_MAX_NEEDS, BRIEF_CARD_MAX_POINTS, BriefCard } from '../chunk-XYSSFI5C.js';
202
197
  export { SuggestionList, SuggestionRow } from '../chunk-Y7PVLEZJ.js';
203
198
  import '../chunk-6C7GQOBV.js';
204
199
  export { StatusCard } from '../chunk-FLW5U7YS.js';
200
+ export { Breadcrumb } from '../chunk-M52HLPOG.js';
201
+ export { KeyChip } from '../chunk-HBDA76EZ.js';
202
+ export { BrandScope, brandScopeInputs } from '../chunk-X7WEE3EK.js';
203
+ import '../chunk-5SGHW42B.js';
204
+ import '../chunk-7W3LYIOC.js';
205
205
  export { CalendarGrid, compareDays, daysInMonth, sameDay, shiftDay, shiftMonth, today } from '../chunk-EE3DJMSQ.js';
206
206
  export { Callout } from '../chunk-BPCY7ZID.js';
207
207
  export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, ShortcutTip, anchorView, beyondSlop, clampPan, clampZoom, fitView, gridOf, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-NCUSI4ZU.js';
@@ -216,8 +216,8 @@ export { HuePicker, HueSwatch } from '../chunk-SHH7UD5U.js';
216
216
  export { Popover } from '../chunk-EC6EUIAD.js';
217
217
  export { CHARACTER_PICKER_COLUMNS, CharacterPicker } from '../chunk-LNQSNXGJ.js';
218
218
  export { NODE_HUES, NODE_HUE_NAMES, isNodeHue } from '../chunk-AYKXMIOR.js';
219
- export { BrandChip } from '../chunk-UH44L7OJ.js';
220
219
  export { BrandLockup } from '../chunk-KXWJJWBD.js';
220
+ export { BrandChip } from '../chunk-UH44L7OJ.js';
221
221
  export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-7IWZN5Q2.js';
222
222
  export { Skeleton } from '../chunk-I4IUX3JF.js';
223
223
  export { PRINCIPAL_KINDS, PrincipalAvatar } from '../chunk-HF5L56YQ.js';
@@ -261,9 +261,9 @@ export { ACCESS_DENIED_REASONS, AccessDeniedCard } from '../chunk-QTMUKRTN.js';
261
261
  export { EmptyState } from '../chunk-PPUR46MK.js';
262
262
  export { Accordion, AccordionItem } from '../chunk-E2QPZGLG.js';
263
263
  export { ACTION_CARD_GROUND, ActionCard, ActionCardRow } from '../chunk-OM2LABPS.js';
264
+ export { ADD_PILL_MS, AddPill } from '../chunk-CVKANYHD.js';
264
265
  export { ActivityLine } from '../chunk-C4256UXE.js';
265
266
  export { ThinkingIndicator } from '../chunk-ED4A6Q24.js';
266
- export { ADD_PILL_MS, AddPill } from '../chunk-CVKANYHD.js';
267
267
  export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-XH55NRHO.js';
268
268
  export { Timeline, TimelineItem } from '../chunk-4MJN2KN6.js';
269
269
  export { Section } from '../chunk-WFCWPXJN.js';
package/dist/index.js CHANGED
@@ -1,34 +1,32 @@
1
1
  import './chunk-PAGITACP.js';
2
- export { WidgetFrame } from './chunk-5K5SZGBI.js';
3
2
  export { ElementToPngError, elementToPng, parseCsv, serializeElement, toCsv } from './chunk-KBSD476L.js';
4
3
  export { TreeCanvas } from './chunk-FPU7AA3X.js';
5
4
  export { TypeSpecimen } from './chunk-JKAFEFFC.js';
6
- export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from './chunk-RBQRTGXX.js';
7
5
  export { REFERENCE_NAME_PATTERN, ValueField, completeReference, isWholeReference, rankReferences, referenceAt, urlSchemeOf } from './chunk-G3CACE5L.js';
6
+ export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from './chunk-RBQRTGXX.js';
8
7
  export { VersionTimeline } from './chunk-L5VU3LZT.js';
8
+ export { WidgetFrame } from './chunk-5K5SZGBI.js';
9
9
  export { THREAD_SUMMARY_LABELS, ThreadSummary } from './chunk-QPYGJ7R7.js';
10
- export { TileGrid } from './chunk-UFID3DSP.js';
11
10
  export { TIME_RANGE_CUSTOM, TIME_RANGE_PICKER_LABELS, TimeRangePicker, timeRangeFieldKey, timeRangeProblem } from './chunk-ZJVLGYE3.js';
12
11
  export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from './chunk-T3S3D4FC.js';
13
12
  export { ToastProvider, Toaster, readingDuration, toasterInsetStyle, useToast } from './chunk-JIBWNHTC.js';
14
13
  export { TagsInput } from './chunk-77VOASOY.js';
15
14
  export { ThemeGallery } from './chunk-NXBCAXP5.js';
16
- export { ThemeSwatch } from './chunk-3XQUEF5C.js';
17
15
  export { DensitySwitcher, ThemeSwitcher } from './chunk-5V6GW6HK.js';
16
+ export { ThemeSwatch } from './chunk-3XQUEF5C.js';
18
17
  export { ThemeToggle } from './chunk-IPMJGK2Q.js';
19
18
  export { applyStoredPreferences, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from './chunk-Z24ZUSTX.js';
19
+ export { TileGrid } from './chunk-UFID3DSP.js';
20
20
  export { Switcher } from './chunk-7M7WKYOV.js';
21
21
  export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell, TableTwoLineCell } from './chunk-3CALM534.js';
22
22
  export { SOURCE_EDITOR_KEYS, SourceEditor, lineStart } from './chunk-PW57R4BN.js';
23
23
  export { StatGroup } from './chunk-OUD75UB2.js';
24
- export { Statement } from './chunk-MZJKPTA5.js';
25
24
  export { StatCard } from './chunk-G5IZGAWS.js';
26
- export { matchesShortcut, useShortcut } from './chunk-LZNPL266.js';
25
+ export { Statement } from './chunk-MZJKPTA5.js';
27
26
  import './chunk-5AHNW5CP.js';
28
27
  export { SLIDE_COMPARE_LABELS, SlideCompare } from './chunk-XJMES7AE.js';
29
- export { SlideFilmstrip } from './chunk-RO5JU6SN.js';
30
28
  export { SlideGrid } from './chunk-6M2N6ETA.js';
31
- export { SelectionBar } from './chunk-XA2QKGBJ.js';
29
+ export { SlideFilmstrip } from './chunk-RO5JU6SN.js';
32
30
  export { SEND_BUTTON_LABELS, SendButton } from './chunk-T2GC7UAP.js';
33
31
  export { SettingsTable, SettingsTableRow } from './chunk-WL4TC4YZ.js';
34
32
  export { SetupWizard } from './chunk-WRZPO4YL.js';
@@ -36,20 +34,22 @@ export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from './chu
36
34
  export { SHEET_COLUMN_EDITOR_LABELS, SheetColumnEditor, SheetColumnTypeGlyph } from './chunk-SGMWLUYQ.js';
37
35
  export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from './chunk-46FIBJCV.js';
38
36
  export { TagGroup } from './chunk-UEOEBOBR.js';
39
- export { RUN_STATES, RunChip } from './chunk-AQ7ZV3CH.js';
37
+ export { matchesShortcut, useShortcut } from './chunk-LZNPL266.js';
40
38
  export { FRAME_HELLO_TIMEOUT_MS, FRAME_LOAD_GRACE_MS, SandboxedFrame, SandboxedFrameNotice, SandboxedFramePlaceholder } from './chunk-V6WDJUYK.js';
41
39
  export { SearchTrigger } from './chunk-ERNT3UTB.js';
42
40
  export { SectionFrame, SectionFrameBody, SectionFrameNav } from './chunk-7BDBO2NP.js';
43
41
  export { SegmentedMeter, segmentedMeterLabel } from './chunk-4AK52VHB.js';
42
+ export { SelectionBar } from './chunk-XA2QKGBJ.js';
44
43
  export { REFUSAL_CARD_LABELS, RefusalCard } from './chunk-7ELFH3RJ.js';
45
44
  export { RelatedRow } from './chunk-CL3FWLDO.js';
46
45
  export { RESULT_TABLE_CARD_LABELS, RESULT_TABLE_COLLAPSED_ROWS, RESULT_TABLE_MAX_ROWS, ResultTableCard } from './chunk-2L4WHYMT.js';
47
46
  export { Table } from './chunk-75NQV4R4.js';
48
47
  export { ReviewList } from './chunk-NFXCJGHG.js';
49
- export { RichEditor, preloadRichEditor } from './chunk-3AMWXJQX.js';
50
- export { RICH_EDITOR_LABELS, richEditorLabels } from './chunk-2DMTW2Y3.js';
51
48
  export { canonicalMarkdown, roundTripMarkdown } from './chunk-GBASM5EV.js';
52
49
  import './chunk-7CSTEH5I.js';
50
+ export { RichEditor, preloadRichEditor } from './chunk-AUSFKGKL.js';
51
+ export { RICH_EDITOR_LABELS, richEditorLabels } from './chunk-2DMTW2Y3.js';
52
+ export { RUN_STATES, RunChip } from './chunk-AQ7ZV3CH.js';
53
53
  export { PROPOSAL_CARD_LABELS, PROPOSAL_FAILURE_OUTCOMES, PROPOSAL_STATES, PROPOSAL_TONES, ProposalCard } from './chunk-M33DABTW.js';
54
54
  export { Prose } from './chunk-DVVP27OD.js';
55
55
  export { QR_DARK, QR_LIGHT, QR_QUIET_ZONE, QrCode, qrModulePath, qrModules } from './chunk-Y56FM3K4.js';
@@ -60,13 +60,13 @@ export { Text } from './chunk-O5CEG7TQ.js';
60
60
  export { AddReaction, REACTION_BAR_LABELS, ReactionBar, reactionWho } from './chunk-4DEKONVJ.js';
61
61
  export { READING_PANE_ENTER, ReadingPane, ReadingPaneByline, ReadingPaneLead, ReadingPaneOutcome, ReadingPaneQuote, ReadingPaneReasoning, ReadingPaneSection, ReadingPaneTitle } from './chunk-64JNKLLP.js';
62
62
  export { RecordChip, RecordChipList } from './chunk-ZPTKAYJK.js';
63
- export { PresenceStack } from './chunk-F7HZYTZT.js';
64
- export { PresenterView, formatStopwatch } from './chunk-WCJTOKTY.js';
65
- export { SLIDE_HEIGHT, SLIDE_WIDTH, SlideStage, useSlideKeys } from './chunk-O6EV6GKI.js';
63
+ export { PresenterView, formatStopwatch } from './chunk-LMEMH6DO.js';
66
64
  export { SLIDE_NAV_LABELS, SlideNav } from './chunk-5AJR6X75.js';
65
+ export { SLIDE_HEIGHT, SLIDE_WIDTH, SlideStage, useSlideKeys } from './chunk-O6EV6GKI.js';
66
+ export { PresenceStack } from './chunk-F7HZYTZT.js';
67
67
  export { PricingCard } from './chunk-X3US25XJ.js';
68
- export { PrincipalPicker } from './chunk-Q6TCUSQA.js';
69
68
  export { PropertyList } from './chunk-OPVTNHPH.js';
69
+ export { PrincipalPicker } from './chunk-Q6TCUSQA.js';
70
70
  export { PageNote } from './chunk-CV4NES3P.js';
71
71
  export { PEEK_RAIL_LABELS, PEEK_RAIL_MAX_WIDTH, PEEK_RAIL_MIN_WIDTH, PEEK_RAIL_WIDTH, PeekHost, PeekNeighbours, PeekRail, isPlainPress, peekClickHandler, peekRowActivation, usePeekNeighbours, usePeekOrder, usePeekStep } from './chunk-CDNZTCP2.js';
72
72
  export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from './chunk-QGEDXYLB.js';
@@ -81,9 +81,9 @@ export { TreeGrid } from './chunk-ZDWAIVWL.js';
81
81
  export { SIZE_EPSILON, TYPE_AHEAD_RESET_MS, createTreeModel, isTypeAheadKey, layoutConnectors, layoutForest, placeGroups, treeAllExpandable, treeAncestors, treeCollapseOrAscend, treeExpandOrDescend, treeExpandTo, treeExpandable, treeFirst, treeFirstChild, treeItemAction, treeLast, treeLevel, treeNext, treeParent, treePosInSet, treePrevious, treeSetSize, treeStep, treeTypeAhead, treeVisible, typeAheadBuffer, useLayoutAnchor, useMeasuredSizes, useTreeState } from './chunk-MY374UUD.js';
82
82
  export { OrgLabel } from './chunk-5YXMKZUA.js';
83
83
  export { Outline, scrollToHeading, useActiveHeading } from './chunk-7QCSISHM.js';
84
- export { MentionChip } from './chunk-PX5BOALQ.js';
85
84
  export { MENTION_MENU_LABELS, MentionMenu, mentionQuery } from './chunk-3BRXEMYT.js';
86
85
  export { PersonRow } from './chunk-EALRMP7N.js';
86
+ export { MentionChip } from './chunk-PX5BOALQ.js';
87
87
  export { MERGE_CONFLICTS_LABELS, MergeConflicts } from './chunk-C42XW5YP.js';
88
88
  export { ActionDivider, MessageAction, MessageActions, QuickReaction } from './chunk-LT44RL62.js';
89
89
  import './chunk-TDFLCUBE.js';
@@ -99,7 +99,7 @@ export { LinkCard } from './chunk-O3MYBNRO.js';
99
99
  import './chunk-KOJPDCGQ.js';
100
100
  export { LinkInterstitial, openExternal } from './chunk-MYAARF4Z.js';
101
101
  export { List, ListItem } from './chunk-PS5ZYIA6.js';
102
- export { ListDetail } from './chunk-SNJM5KPV.js';
102
+ export { ListDetail } from './chunk-P33VNG7Q.js';
103
103
  export { ListInput, withDraft } from './chunk-GLKQHN7G.js';
104
104
  export { INLINE_EDITOR_LABELS, InlineEditor } from './chunk-O7KG4CXB.js';
105
105
  export { InlineRef } from './chunk-JGDCVLD4.js';
@@ -110,7 +110,7 @@ import './chunk-MICRGE3J.js';
110
110
  import './chunk-FFMCMSJB.js';
111
111
  export { IconTile } from './chunk-3LI4TRUR.js';
112
112
  export { ImageUpload } from './chunk-K6Y6CDEZ.js';
113
- export { INBOX_ROW_LEAVE, InboxGroup, InboxList, InboxMore, InboxRow, InboxToggle } from './chunk-F6ZUM66S.js';
113
+ export { INBOX_ROW_LEAVE, InboxGroup, InboxList, InboxMore, InboxRow, InboxToggle } from './chunk-VKNZQB2G.js';
114
114
  export { IndicatorAnchor } from './chunk-27MJPU7G.js';
115
115
  export { FILTER_CHIP_ATTRIBUTE, FilterChip, FilterChipGroup } from './chunk-IWZG7NPV.js';
116
116
  export { FindingList } from './chunk-LSRQ2A6B.js';
@@ -128,12 +128,12 @@ export { FactList } from './chunk-SNQ7PH3D.js';
128
128
  export { FileDrop, FilePickButton, droppedFiles, pickedFiles } from './chunk-KQWJWTED.js';
129
129
  export { FileList } from './chunk-5WRWBDML.js';
130
130
  export { Divider } from './chunk-6KWNXIDE.js';
131
- export { DockColumn } from './chunk-5JPOFAVN.js';
132
131
  export { DOC_TABS_EDITOR_LABELS, DocTabsEditor } from './chunk-RDIQB5ZE.js';
132
+ export { DockColumn } from './chunk-5JPOFAVN.js';
133
133
  export { DownloadButton } from './chunk-EHFQMY3B.js';
134
134
  export { downloadBlob, downloadText, safeFilename, useDownload } from './chunk-YNRKVY7X.js';
135
- export { EMOJI_GROUPS, EMOJI_PICKER_COLUMNS, EMOJI_PICKER_LABELS, EmojiPicker, emojiName, searchEmoji } from './chunk-SPNTUQBV.js';
136
135
  export { EditingStatus } from './chunk-O55JQ7BE.js';
136
+ export { EMOJI_GROUPS, EMOJI_PICKER_COLUMNS, EMOJI_PICKER_LABELS, EmojiPicker, emojiName, searchEmoji } from './chunk-SPNTUQBV.js';
137
137
  export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from './chunk-3H6OZUZ3.js';
138
138
  export { DEEP_WORK_CARD_LABELS, DEEP_WORK_STATES, DEEP_WORK_STATE_LABELS, DeepWorkCard } from './chunk-35CKF77R.js';
139
139
  export { STEP_STATES, STEP_STATE_LABELS, StepList, StepStateMark, Stepper, stepDetailPieces } from './chunk-TMML7BHT.js';
@@ -142,8 +142,8 @@ export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTo
142
142
  export { DescriptionList, DescriptionListItem } from './chunk-LH4OF7FI.js';
143
143
  export { DIFF_SUMMARY_LABELS, DIFF_VIEW_LABELS, DiffSummary, DiffView, MAX_DIFF_LINES, collapseDiff, diffLines, diffStat, firstChangedLines, splitLines } from './chunk-AOFVXE6V.js';
144
144
  export { DirectoryList } from './chunk-RKIJAXQA.js';
145
+ export { Container } from './chunk-HJO4WCH6.js';
145
146
  export { ContrastHelp } from './chunk-TBQFZV4H.js';
146
- export { ContrastBadge, ContrastLevelTag, contrastLevel, contrastRatio, formatContrastRatio } from './chunk-WMSXPF7T.js';
147
147
  export { CursorFlag } from './chunk-MMCYH5LB.js';
148
148
  export { PresenceRing, presenceHueClass } from './chunk-EFX2YC5T.js';
149
149
  export { ChooserList, ColumnChooser, DATA_GRID_ICON_TRACK, DataGrid, columnChoicesOf, countDataGridRows, fitGridColumns, nextGridSort, parseGridSort, useAnyDataGridDriving, useDataGridDriving } from './chunk-L2QRKIL4.js';
@@ -161,12 +161,12 @@ export { CompactNav, CompactNavGroup, CompactNavItem, CompactNavSeparator, group
161
161
  export { LockedLabel } from './chunk-TEV5REGB.js';
162
162
  export { ConfirmField, confirmMatches } from './chunk-PEBQMX5X.js';
163
163
  export { InlineCode } from './chunk-PLL7ZJHY.js';
164
- export { Container } from './chunk-HJO4WCH6.js';
165
164
  export { CONFLICT_NOTE_LABELS, ConflictNote } from './chunk-B3PK2LND.js';
165
+ export { ContrastBadge, ContrastLevelTag, contrastLevel, contrastRatio, formatContrastRatio } from './chunk-WMSXPF7T.js';
166
166
  export { CHIP_FIELD_LABELS, ChipField } from './chunk-TRXTO3WC.js';
167
167
  export { ChoiceButtons } from './chunk-RVSNBUIU.js';
168
- export { ChoiceList } from './chunk-XU7RQNT6.js';
169
168
  export { ChoiceCards } from './chunk-JDMJVVVQ.js';
169
+ export { ChoiceList } from './chunk-XU7RQNT6.js';
170
170
  export { CodeBlock } from './chunk-4ME4J3YY.js';
171
171
  export { ColorChip } from './chunk-C6T4VBEY.js';
172
172
  export { ColorField } from './chunk-OOOVL77Y.js';
@@ -174,13 +174,13 @@ export { ColorSwatch } from './chunk-6EZX26BD.js';
174
174
  export { CopyButton, Copyable } from './chunk-ETNQYT5O.js';
175
175
  export { useClipboard, writeClipboard } from './chunk-STJ7QBC3.js';
176
176
  export { useOutcome } from './chunk-DTIW4CHZ.js';
177
- import './chunk-3L5NHASN.js';
178
- export { ActivityStrip, BarList, ChartEmpty, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Histogram, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, histogramTicks, niceScale, useChartHover } from './chunk-YWVT7B6N.js';
179
177
  export { ChatDay, ChatDayPill } from './chunk-ONHYFU7D.js';
178
+ export { ActivityStrip, BarList, ChartEmpty, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Histogram, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, histogramTicks, niceScale, useChartHover } from './chunk-YWVT7B6N.js';
179
+ import './chunk-3L5NHASN.js';
180
180
  export { ChatDivider } from './chunk-K774LUN3.js';
181
181
  export { CHAT_MESSAGE_CLASS, CHAT_MESSAGE_FAILURE_LABELS, ChatMessage, ChatMessageFailure } from './chunk-IUBOLGHG.js';
182
- export { CHAT_THREAD_FOLLOW_WITHIN, CHAT_THREAD_LABELS, ChatThread } from './chunk-VONEKR3J.js';
183
182
  export { CheckGrid } from './chunk-NN475NAP.js';
183
+ export { CHAT_THREAD_FOLLOW_WITHIN, CHAT_THREAD_LABELS, ChatThread } from './chunk-VONEKR3J.js';
184
184
  export { BOARD_NAME_MIN_CHARS, CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, CanvasBoard, TITLE_GLYPH_EM, boardName, boardRoom, liveBoards, titleSize } from './chunk-2SVQBQAD.js';
185
185
  export { Note } from './chunk-5SZGKSGL.js';
186
186
  export { CanvasSchematic } from './chunk-NBWNLYWZ.js';
@@ -193,15 +193,15 @@ export { ChangeMark } from './chunk-VB3FVKNI.js';
193
193
  export { LONGTEXT_MAX_DEFAULT, RATING_MAX_CEILING, RATING_MAX_DEFAULT, SHEET_COLUMN_BOUNDS, SHEET_COLUMN_TYPES, SHEET_COLUMN_WIDTHS, SHEET_FIT_SAMPLES, SHEET_LABELS, SHEET_ROW_HEIGHT, SHEET_ROW_NUMBER_WIDTH, SheetPendingEdits, TEXT_MAX_DEFAULT, URL_MAX, cellDescription, cellKey, cellSpeech, changeText, changeTime, checkValue, columnOffsets, columnWidth, compareValues, displayText, drawnColumns, editText, editorSide, findOption, findPerson, fitSamples, fittedWidth, flagText, hasPrevious, inRange, isEmptyValue, isMod, isMultiCell, isSheetColumnType, isTypingKey, liveOptions, moveFrom, nextSort, normalizeValue, optionHue, parseOptionList, parseTSV, parseText, planClear, planPaste, presenceByCell, presenceByColumn, presenceByRow, rangeOf, ratingMax, refusalText, retypeColumn, rowName, sameValue, scrollToRow, sheetLabels, sortRows, spokenText, statusTone, textMax, toTSV, visibleRows } from './chunk-LFSIKGRQ.js';
194
194
  export { PRESENCE_ACTIVITIES, PRESENCE_HUES, PRESENCE_LABELS, assignPresenceHues, collapseSessions, joinNames, presenceLabels, presenceOrder } from './chunk-Z7JYG5TF.js';
195
195
  export { BrandSample } from './chunk-AVMQMY66.js';
196
- export { BrandScope, brandScopeInputs } from './chunk-X7WEE3EK.js';
197
- import './chunk-5SGHW42B.js';
198
- import './chunk-7W3LYIOC.js';
199
- export { Breadcrumb } from './chunk-M52HLPOG.js';
200
- export { KeyChip } from './chunk-HBDA76EZ.js';
201
196
  export { BRIEF_CARD_LABELS, BRIEF_CARD_MAX_FOLLOW_UPS, BRIEF_CARD_MAX_NEEDS, BRIEF_CARD_MAX_POINTS, BriefCard } from './chunk-XYSSFI5C.js';
202
197
  export { SuggestionList, SuggestionRow } from './chunk-Y7PVLEZJ.js';
203
198
  import './chunk-6C7GQOBV.js';
204
199
  export { StatusCard } from './chunk-FLW5U7YS.js';
200
+ export { Breadcrumb } from './chunk-M52HLPOG.js';
201
+ export { KeyChip } from './chunk-HBDA76EZ.js';
202
+ export { BrandScope, brandScopeInputs } from './chunk-X7WEE3EK.js';
203
+ import './chunk-5SGHW42B.js';
204
+ import './chunk-7W3LYIOC.js';
205
205
  export { CalendarGrid, compareDays, daysInMonth, sameDay, shiftDay, shiftMonth, today } from './chunk-EE3DJMSQ.js';
206
206
  export { Callout } from './chunk-BPCY7ZID.js';
207
207
  export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, ShortcutTip, anchorView, beyondSlop, clampPan, clampZoom, fitView, gridOf, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from './chunk-NCUSI4ZU.js';
@@ -216,8 +216,8 @@ export { HuePicker, HueSwatch } from './chunk-SHH7UD5U.js';
216
216
  export { Popover } from './chunk-EC6EUIAD.js';
217
217
  export { CHARACTER_PICKER_COLUMNS, CharacterPicker } from './chunk-LNQSNXGJ.js';
218
218
  export { NODE_HUES, NODE_HUE_NAMES, isNodeHue } from './chunk-AYKXMIOR.js';
219
- export { BrandChip } from './chunk-UH44L7OJ.js';
220
219
  export { BrandLockup } from './chunk-KXWJJWBD.js';
220
+ export { BrandChip } from './chunk-UH44L7OJ.js';
221
221
  export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from './chunk-7IWZN5Q2.js';
222
222
  export { Skeleton } from './chunk-I4IUX3JF.js';
223
223
  export { PRINCIPAL_KINDS, PrincipalAvatar } from './chunk-HF5L56YQ.js';
@@ -261,9 +261,9 @@ export { ACCESS_DENIED_REASONS, AccessDeniedCard } from './chunk-QTMUKRTN.js';
261
261
  export { EmptyState } from './chunk-PPUR46MK.js';
262
262
  export { Accordion, AccordionItem } from './chunk-E2QPZGLG.js';
263
263
  export { ACTION_CARD_GROUND, ActionCard, ActionCardRow } from './chunk-OM2LABPS.js';
264
+ export { ADD_PILL_MS, AddPill } from './chunk-CVKANYHD.js';
264
265
  export { ActivityLine } from './chunk-C4256UXE.js';
265
266
  export { ThinkingIndicator } from './chunk-ED4A6Q24.js';
266
- export { ADD_PILL_MS, AddPill } from './chunk-CVKANYHD.js';
267
267
  export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from './chunk-XH55NRHO.js';
268
268
  export { Timeline, TimelineItem } from './chunk-4MJN2KN6.js';
269
269
  export { Section } from './chunk-WFCWPXJN.js';
package/dist/styles.css CHANGED
@@ -22736,7 +22736,7 @@ a.crewlet-icon-btn {
22736
22736
  }
22737
22737
 
22738
22738
 
22739
- /* InboxList-X5Q5WWAI.css */
22739
+ /* InboxList-NVPIL3WU.css */
22740
22740
  /*
22741
22741
  * The inbox's column: groups of rows, each row a control with the task it is
22742
22742
  * about under it, and the quiet toggles at the end.
@@ -22962,19 +22962,36 @@ a.crewlet-icon-btn {
22962
22962
  }
22963
22963
 
22964
22964
  /*
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.
22965
+ * THE LEADING SLOT FITS WHAT IT HOLDS. It is at least a target square (and at
22966
+ * least a line tall), with its mark centred in it, and it grows to a larger
22967
+ * mark, such as a 32px face, rather than letting it spill: a fixed one-line
22968
+ * box let a 32px face overflow it by 8px, up and to the left, until it all but
22969
+ * touched the row's edge.
22970
+ *
22971
+ * THE NAME'S LINE IS CENTRED ON A TARGET-SIZED MARK by moving the words down
22972
+ * rather than the mark up: the words start half the difference between the
22973
+ * target and a line lower, and the control's top pad is that much shorter, so
22974
+ * a row with a target-sized avatar keeps its height and its name where they
22975
+ * were, with the avatar inside the control instead of over its pad. A larger
22976
+ * mark hangs from the same top, beside the name's line and the one under it.
22970
22977
  */
22978
+ .crewlet-inbox-row__control--leading {
22979
+ --crewlet-inbox-row-lift: max(0px, (var(--size-target-min) - 1lh) / 2);
22980
+
22981
+ padding-top: calc(var(--spacing-2) + var(--spacing-1) / 2 - var(--crewlet-inbox-row-lift));
22982
+ }
22983
+
22984
+ .crewlet-inbox-row__control--leading > .crewlet-inbox-row__main {
22985
+ padding-top: var(--crewlet-inbox-row-lift);
22986
+ }
22987
+
22971
22988
  .crewlet-inbox-row__leading {
22972
22989
  display: inline-flex;
22973
22990
  flex: none;
22974
22991
  align-items: center;
22975
22992
  justify-content: center;
22976
- width: var(--size-target-min);
22977
- height: 1lh;
22993
+ min-width: var(--size-target-min);
22994
+ min-height: max(var(--size-target-min), 1lh);
22978
22995
  }
22979
22996
 
22980
22997
  .crewlet-inbox-row__main {
@@ -22984,24 +23001,49 @@ a.crewlet-icon-btn {
22984
23001
  min-width: 0;
22985
23002
  }
22986
23003
 
23004
+ /*
23005
+ * THE HEAD IS ONE RUN OF WORDS: who, then what they did, wrapping as words do
23006
+ * and stopping at two lines with an ellipsis. The name comes first, so it is
23007
+ * the last thing a long qualifier can push out of sight. As one line of boxes
23008
+ * the name was the only one allowed to shrink, so a qualifier longer than a
23009
+ * word ("replied to a thread in Product Manager") squeezed the name to
23010
+ * nothing and pushed the time past the row's edge.
23011
+ *
23012
+ * THE TIME FLOATS AT THE END OF THE FIRST LINE, so only that line gives up
23013
+ * room to it and the second runs the row's full width: "replied to a thread
23014
+ * in #engineering" keeps the room's name, the part of the line most worth
23015
+ * reading, where a column of its own took the time's width from both lines.
23016
+ * The float sits in a block of its own inside the clamp, which is where every
23017
+ * engine lays a float out and still counts the clamped lines.
23018
+ */
22987
23019
  .crewlet-inbox-row__head {
22988
- display: flex;
22989
- align-items: baseline;
22990
- gap: var(--spacing-1);
23020
+ display: -webkit-box;
23021
+ -webkit-box-orient: vertical;
23022
+ -webkit-line-clamp: 2;
23023
+ line-clamp: 2;
22991
23024
  min-width: 0;
23025
+ overflow: hidden;
23026
+ overflow-wrap: anywhere;
23027
+ color: var(--color-text-tertiary);
22992
23028
  }
22993
23029
 
22994
- .crewlet-inbox-row__title {
22995
- min-width: 0;
22996
- overflow: hidden;
22997
- text-overflow: ellipsis;
23030
+ .crewlet-inbox-row__head-text {
23031
+ display: block;
23032
+ }
23033
+
23034
+ /* The time (and any status), in the head's own line box, so the time sits on the name's baseline. */
23035
+ .crewlet-inbox-row__head-end {
23036
+ float: inline-end;
23037
+ margin-inline-start: var(--spacing-2);
22998
23038
  white-space: nowrap;
23039
+ }
23040
+
23041
+ .crewlet-inbox-row__title {
22999
23042
  font-weight: var(--font-weight-medium);
23000
23043
  color: var(--color-text-primary);
23001
23044
  }
23002
23045
 
23003
23046
  .crewlet-inbox-row__qualifier {
23004
- flex: none;
23005
23047
  font-size: var(--font-size-xs);
23006
23048
  color: var(--color-text-tertiary);
23007
23049
  }
@@ -23011,8 +23053,6 @@ a.crewlet-icon-btn {
23011
23053
  }
23012
23054
 
23013
23055
  .crewlet-inbox-row__meta {
23014
- flex: none;
23015
- margin-inline-start: auto;
23016
23056
  font-size: var(--font-size-xs);
23017
23057
  font-variant-numeric: tabular-nums;
23018
23058
  white-space: nowrap;
@@ -23060,21 +23100,12 @@ a.crewlet-icon-btn {
23060
23100
  color: var(--color-text-secondary);
23061
23101
  }
23062
23102
 
23103
+ /* At the end of the first line, before the time when the row has both. */
23063
23104
  .crewlet-inbox-row__status {
23064
23105
  display: inline-flex;
23065
- flex: none;
23066
23106
  align-items: center;
23067
23107
  }
23068
23108
 
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
23109
  /*
23079
23110
  * What came of the row: a glyph in the tone's ink, then words in the
23080
23111
  * secondary ink, on one line that wraps rather than cuts.
@@ -23130,7 +23161,9 @@ a.crewlet-icon-btn {
23130
23161
 
23131
23162
  /*
23132
23163
  * The task, under the words and lined up with them: the control's start pad,
23133
- * the leading slot and the gap after it.
23164
+ * a target-sized leading slot and the gap after it. The task sits outside the
23165
+ * control, so it lines up with the words for a mark of the target size, the
23166
+ * size `leading` asks for.
23134
23167
  */
23135
23168
  .crewlet-inbox-row__aside {
23136
23169
  min-width: 0;
@@ -25458,7 +25491,7 @@ a.crewlet-link-card:hover .crewlet-link-card__title {
25458
25491
  }
25459
25492
 
25460
25493
 
25461
- /* ListDetail-Q7SFVKSO.css */
25494
+ /* ListDetail-WXBCLONL.css */
25462
25495
  /*
25463
25496
  * ListDetail: a list beside the detail of what is chosen in it, each scrolling
25464
25497
  * on its own in the height it is given, one pane where it is narrow
@@ -25526,6 +25559,12 @@ a.crewlet-link-card:hover .crewlet-link-card__title {
25526
25559
  min-height: 0;
25527
25560
  }
25528
25561
 
25562
+ /* A LIST THAT GROWS SCROLLS IN ITS OWN COLUMN, whatever it holds. The pane
25563
+ left the scrolling to its content, which a DirectoryList does for its
25564
+ groups and an InboxList does not: an activity list taller than the screen
25565
+ ran past the pane's end, where the screen clipped its later rows and its
25566
+ "older" link, with nothing to scroll them into view. A list that scrolls
25567
+ itself fills the pane and never makes it overflow. */
25529
25568
  .crewlet-list-detail__list {
25530
25569
  display: flex;
25531
25570
  flex-direction: column;
@@ -25533,6 +25572,7 @@ a.crewlet-link-card:hover .crewlet-link-card__title {
25533
25572
  min-height: 0;
25534
25573
  padding-right: var(--crewlet-list-detail-gutter);
25535
25574
  border-right: 1px solid var(--color-border-default);
25575
+ overflow-y: auto;
25536
25576
  }
25537
25577
 
25538
25578
  /* A DIRECTORY RUNS TO THE HAIRLINE. A DirectoryList is navigation: its lines
@@ -25567,7 +25607,6 @@ a.crewlet-link-card:hover .crewlet-link-card__title {
25567
25607
  .crewlet-list-detail__list {
25568
25608
  padding-right: 0;
25569
25609
  border-right: 0;
25570
- overflow-y: auto;
25571
25610
  }
25572
25611
 
25573
25612
  /* 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.86.1",
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.86.1",
46
+ "@crewlethq/tokens": "0.86.1",
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 { 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';